webpack 5 - garevna/js-course GitHub Wiki
✅ webpack.config.js
✅ style-loader
✅ css-loader
Создадим в папке нашего проекта папку 📂 css
Поместим в нее файл 📝 main.css
body {
background-color: #000;
font-family: monospace, Arial;
font-size: 16px;
color: #9ab;
}Добавим в файл script.js импорт созданного нами файла стилей:
import css from '../css/main.css'А теперь запустим сборку проекта
🚫 Вебпак выдаст нам ошибку:
он умеет собирать модули js, а вот для загрузки файлов других форматов нужны специальные загрузчики
Создадим файл webpack.config.js в корневой папке нашего приложения
Это скрипт, который создаст объект конфигурации webpack
| ☑️ | entry |
точка входа |
с этого файла начинается построение графа зависимостей |
| ☑️ | output |
файл сборки |
результат работы webpack |
| ☑️ | module |
описание модулей |
по умолчанию модули - это js-файлыдля подключения в качестве модулей файлов с другим расширением ( например, .css или .html )
нужны специальные программы-загрузчикиПроги-загрузчики "обертывают" содержимое нужного файла в скрипт, чтобы превратить их в "нормальные" модулиОбъект module имеет свойство rules ( объект с двумя свойствами ):module ↪ rules ↪ test тип файла модулей (/\.css$/) ↪ use загрузчик для файлов этого типа |
| ☑️ | plugins |
плагины |
Для разрешения конфликтов маршрутов ( путей ) к различным файлам сборки
первым делом в файле кофигурации webpack ( webpack.config.js )
подключайте встроенный Node.js-модуль path:
const path = require ( 'path' )Теперь можно использовать глобальную переменную __dirname для получения абсолютного пути к файлу с помощью метода path.resolve
Например, путь к папке build, находящейся в корневой папке приложения:
path.resolve ( __dirname, "build" )Для подключения css-файла нужно указать в файле 📝 webpack.config.js
( в объекте конфигурации, в свойстве module )
правило, по которому будут обрабатываться файлы с расширением css
Для этого в свойстве module.rules мы определим значение свойства test
с помощью регулярного выражения: /\.css$/ ( любые файлы с расширением css )
а свойство module.rules.use сделаем массивом, в котором передадим ссылки на загрузчиков:
[ 'style-loader', 'css-loader' ]const path = require ( 'path' )
module.exports = {
entry: { main: './js/script.js' },
output: {
path: path.resolve ( __dirname, 'build' ),
filename: 'index.js'
},
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
}
]
}
}Для того, чтобы вы понимали, почему в файле 📝 webpack.config.js используется module.exports, и как это работает, нужно понимать следующее:
В Node.js:
✋ module - это объект JS, у которого есть свойство ☝ exports
Если в файле 📝 sourse.js определено свойство module.exports, в любом другом файле ( например, 📝 sample.js ) можно вызвать функцию 🛒 require и передать ей в качестве аргумента имя файла ( "sourse.js" )
Результатом работы функции 🛒 require будет объект, ссылку на который мы поместили в module.exports в файле 📝 sample.js
☕ 1️⃣
module.exports = {
hello: function () {
console.log ( 'Привет, будущие девелоперы!' )
},
message: function ( mess ) { console.log ( mess ) }
}let lib = require ( './script.js' )
lib.hello ()
lib.message ( "Вы еще не знакомы с Node.js ?" ) Запустим теперь команду:
npm run start
> [email protected] start Z:\home\npm-test
> node start.js
Привет, будущие девелоперы!
Вы еще не знакомы с Node.js ?
npm install css-loader style-loader --save-dev
После установки загрузчиков они окажутся в папке 📂 node_modules проекта
package.json появилось свойство devDependencies, в котором перечислены установленные нами загрузчики с указанием версии пакета
👁🗨 Вебпак находится в режиме отслеживания наших файлов
Теперь перезагрузите страницу, в которой открыт файл index.html, и вы увидите, что созданный нами файл стилей подключен
Мы можем внести изменения в любой из наших файлов, и эти изменения будут автоматически отображены в файле сборки
Давайте, например, добавим в файл main.css:
img { margin: 40px; border: dotted 2px yellow; }перезагрузите страницу, и вы увидите изменения
