Webpack — инструмент веб-разработчика, который соединяет JavaScript- и CSS-файлы в единое целое — файл, который часто называется «bundle» (с англ. «пачка»).
https://webpack.js.org/ — официальный сайт
Содержание
Устанавливаем Node и npm
Чтобы проверить установлен ли Node.js набираем в терминале (командной строке):
node -v
Если показывает текущую версию, то установлен, иначе устанавливаем его по инструкции ниже.
Webpack построен на Node.js, поэтому для его работы требуется запуск как Node, так и npm (node package manager — менеджер пакетов Node). Порядок действий:
- Скачиваем и устанавливаем Node.js с официального сайта.
- Для установки npm открываем командную строку (например, Терминал MacOS) и выполняем команду:
sudo npm install -g
Sudo
и ключ-g
позволяют установить модуль для всех пользователей через учётную запись администратора, но для этого потребуется ввести пароль. - Выполняем:
npm init npm init -y
- флаг y, чтобы пропустить ввод настроек, так скажем для убыстрения процесса :-)
При создании файла package.json
просто нажимайте «Enter»: настройки по умолчанию приемлемые. Кроме того, при необходимости можно их изменить.
В package.json
хранятся все зависимости необходимые для сборки проекта.
Когда package.json
создан, вы увидите небольшой документ с настройками. В нём хранится всё, что нужно знать о себе проекту.
{
"name": "myproject",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Добавляем Webpack
Выполняем следующий код, чтобы добавить Webpack к проекту.
npm install webpack -D
или
npm install -D webpack webpack-cli
После чего произойдёт 3 вещи:
- Имя «Webpack» добавится в
package.json
в качествеdevDependency
(будет использоваться при разработке, но не в рабочей версии). Для этого указывается ключ-D
. - Новый каталог
node_modules
добавится к проекту. - Webpack (файлы модуля) появятся в каталоге
node_modules
.
Добавляем Webpack как скрипт
Добавляем следующий скрипт в package.json
:
"scripts": {
"build": "webpack",
"start": "webpack --watch"
},
Теперь запускаем Webpack-версию проекта через npm, выполнив npm run build
и npm run start
в командной строке.
В документации Webpack глобальную установку не рекомендуют. Она вынуждает разработчика использовать во всех проектах определенную версию Webpack и приводит к краху, если использовать другую версию.
Файловая структура
- Создаём новый каталог
src
в корне проекта. - Создаём файл
src/app.js
, в котором укажем путь к нашим .js и .scss файлам. - Создаём файл
index.html
в корне проекта. - Делаем ссылку на JavaScript-файл перед тегом
</body>
вindex.html
:<script type="text/javascript" src="dist/bundle.js"></script>
Делайте ссылку только на
dist\bundle.js
, аsrc\app.js
включать не требуется. Дело в том, что этого файла ещё нет. Webpack сделает его для нас.
Конфигурация Webpack
- Создаём файл
webpack.config.js
в корне проекта. - Копируем и вставляем следующий фрагмент кода, который подскажет Webpack, что от него нужно.
const path = require('path');
module.exports = {
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
}
};
«Entry» и «Output»
«Entry» (входные данные). Входной файл называется app.js
и расположен в каталоге src
.
«Output» (выходные данные). Это место, куда Webpack будет размещать готовый файл. Он будет называться bundle.js
и появляться в каталоге dist
(«distribution» — с англ. «размещение»).
Добавляем JavaScript
Теперь напишем код для последующей обработки с помощью Webpack:
- В каталоге
src
создаем каталогjs
. - Внутри
js
создаем JavaScript-файлrainbows.js
. - Пишем код в
rainbows.js
. Например:console.log('This is rainbows.js')
- Создаём другой JavaScript-файл —
unicorns.js
в каталогеjs
. - Пишем код в
unicorns.js
. Например:console.log('Hello, unicorns!')
- Добавляем следующий код в
app.js
, чтобы импортироватьrainbows.js
иunicorns.js
:import './js/rainbows.js'; import './js/unicorns.js';
- Запускаем Webpack в Терминале командой:
npm run build
Теперь появился каталог
dist
!После запуска
index.html
в браузере откройте инструменты разработчика (Developer Tools) и посмотрите на консоль. Там будут сообщения как изrainbows.js
,так и
unicorns.js
. npm run dev
— версия разработчика
Добавляем SCSS
- Создаём каталог
scss
вsrc
. - Создаём файл
base.scss
в каталогеscss
. - Добавляем CSS-код в
base.scss
. Например:$bg-color: pink; body { background: $bg-color; }
- Добавляем следующий код в
src/app.js
, чтобы импортироватьbase.scss
:import './scss/base.scss'
Чтобы Webpack прочитал sass-стили, необходимо добавить дополнительные загрузчики.
Добавляем загрузчики стилей
- Выполняем команду в Терминале, чтобы установить style-loader, css-loader, sass-loader, node-sass, extract-text-webpack-plugin.
npm install style-loader css-loader sass-loader node-sass extract-text-webpack-plugin -D
- Добавляем плагин «Extract Text Plugin» в начало
webpack.config.js
. Он отвечает за перемещение CSS в отдельный файл.const ExtractTextPlugin = require('extract-text-webpack-plugin');
- Теперь указываем Webpack, что необходимо обработать .scss файлы. Он выполнит их через «Extract Text Plugin», CSS- и Sass-загрузчик. Вставляем следующий код после фигурной скобки группы «output». Обратите внимание на запятую!
output: { ... }, module: { rules: [ { test: /\.scss$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: ['css-loader', 'sass-loader'] }) } ] }
- Делаем ссылку на «Extract Text Plugin» прямо перед последней фигурной скобкой. Это даст знать Webpack, что все CSS-файлы необходимо соединить в отдельный файл и назвать его «style.css».
plugins: [ new ExtractTextPlugin('style.css') ]
- Выполняем команду в Терминале, чтобы установить style-loader, css-loader, sass-loader, node-sass, extract-text-webpack-plugin.
Webpack.config.js
теперь выглядит так:
const path = require('path');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: ['css-loader', 'sass-loader']
})
}
]
},
plugins: [
new ExtractTextPlugin('style.css')
]
};
Расскажем HTML про всё!
- Делаем ссылку на CSS-файл в
<head>
.<link rel='stylesheet' href='dist/style.css'>
- Запускаем Webpack в Терминале.
npm run build
- Открываем
index.html
в браузере. Если фон розовый, значит, CSS загрузился. - Благодаря команде Webpack
watch
, которую мы добавили в npm-скрипты, обработка происходит после каждого изменения. Она будет производиться автоматически после каждого сохранения исходного файла в редакторе.npm run start
- Вносим изменения в
base.scss
. Например:$bg-color: orange;
- Обновляем страницу в браузере. Цвет фона меняется на оранжевый.
Добавляем и редактируем файлы
- Создаём файл
typography.scss
в каталогеsrc/scss
. - Добавляем в него немного кода SCSS. Например:
@import url('https://fonts.googleapis.com/css?family=Roboto'); $base-font: 'Roboto'; $title-padding: 3em; h1 { font-family: $base-font; padding: $title-padding; }
- Прописываем ссылку на
typography.scss
вsrc/app.js
.import './scss/typography.scss';
- Обновляем страницу в браузере. Типографика изменилась? Да, он работает!
Заключение
Существуют ещё другие способы настройки Webpack, но главное — понять принципы среды, как она в действительности работает. Выше мы рассмотрели, как составные части среды работают вместе.
На первый взгляд Webpack кажется сложным. Внимательно разберите этапы работы, и тогда вы получите понятный и полезный инструмент для создания проектов.
Источник: https://tproger.ru/translations/webpack-basics/
Дополнительно
Для того, чтобы работать с html файлами
можно использовать специальный плагин
https://webpack.js.org/plugins/html-webpack-plugin/
Cleaning up the /dist
folder — очистка папки dist
https://webpack.js.org/guides/output-management/