Сборка JavaScript модулей с помощью Webpack
Доброго времени суток! В данной статье я расскажу Вам как можно собрать все JavaScript модули в один js-файл, который затем будет подключаться на странице.
Вы можете спросить - а зачем это нужно? Отвечаю - современная фронтенд разработка ушла далеко вперед. Браузерные JavaScript-приложения стали больше, количество файлов и строк кода в них измеряется тысячами. Поэтому, чтобы с ними было проще работать, используют модули - файлы JavaScript кода, которые включают в себя логику в рамках какой-то определенной сферы. Модулей много и все их подключать на страницу по отдельности нехорошо, так как это увеличит время ответа клиенту и в конечном итоге может привести к тому, что пользователь уйдет с сайта. Поэтому придумали такие инструменты - как сборщики (бандлеры) модулей для JavaScript. С помощью них - несколько отдельных модулей можно собрать в один JS-файл - бандл (пакет), который браузер быстрее загрузить и быстрее выполнит.
Сборщиков модулей существует большое количество, некоторые из них это - Browserify, Webpack, Parcel. Далее я покажу Вам как можно собрать JS-пакет (бандл) с помощью Webpack.
В корне проекта есть папка src со следующим содержимым:
app.js
index.html
Test.js
Код app.js
// импортируем модуль
import Test from './Test.js';
// ссылка на DOM
const appDOM = document.querySelector('#app');
// создаем объект класса Test
const test = new Test();
// записываем значение вызова метода в DOM
appDOM.innerHTML = test.render()
Код Test.js
class Test
{
render() {
return ('Я простой JavaScript класс-модуль');
}
}
export default Test;
Код index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Webpack</title>
</head>
<body>
<div id="app"></div>
</body>
</html>
Далее нам нужно установить сам Webpack и средство командной строки, с помощью которого мы будем непосредственно работать с Webpack. Для этого надо выполнить команду yarn или npm install, предварительно создав package.json файл с содержанием указанным ниже:
файл package.json
{
"name": "js-bundle-all-modules",
"version": "1.0.0",
"main": "src/app.js",
"license": "MIT",
"scripts": {
"dev": "webpack --mode development",
"start": "webpack-dev-server --open",
"prod": "webpack --mode production"
},
"devDependencies": {
"@babel/core": "^7.11.4",
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/preset-env": "^7.11.0",
"babel-loader": "^8.1.0",
"html-webpack-plugin": "^4.3.0",
"webpack": "^4.44.1",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0"
}
}
В общем, уже можно запускать команду yarn dev в консоли - и проект будет собран в папке dist. Если вы заглянете в нее, то увидите файлы app.bundle.js и index.html. Если запустить команду yarn prod - то проект соберется в режиме production, результат - минифицированный и трудный для чтения человеком код, но очень хорошо понятный браузеру. Если же, запустить команду yarn start - то запустится сервер разработки, который откроет браузер. Теперь любые изменения вносимые в файлы проекта, будут приводить к автоматической пересборке и отображению результатов в браузере.
Но мы пойдем дальше и настроим Webpack несколько по своему:
Код файла webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
// конфигурация Webpack - это обычный JS-модуль
module.exports = {
entry: {
app: './src/app.js', // файл с которого начинается сборка
},
output: {
filename: '[name].bundle.js', // итоговый собранный пакет
path: path.resolve(__dirname, './dist'), // папка куда помещаем собранный пакет
},
devtool: 'inline-source-map', // карты кода для отладки
devServer: {
contentBase: './dist', // папка из которой будет брать контент сервер разработки
},
// правила преобразования
module: {
rules: [
{
test: /\.js$/, // для всех javascript-файлов
exclude: /node_modules/, // за исключением папки с загружаемыми пакетами
use: {
loader: 'babel-loader', // используем транспайлер Babel
options: {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties']
}
}
}
]
},
plugins: [
// данный плагин вставляет ссылку на собранный пакет в html шаблон
new HtmlWebpackPlugin({
template: './src/index.html'
}),
]
};
Вот таким образом, мы собрали все наши модули в один пакет с помощью Webpack.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.