Webpack является инструментом, работающим внутри среды выполнения Node.js. Несмотря на то что конечной целью Webpack обычно становится сборка клиентского JavaScript-кода для браузера, сам процесс сборки выполняется именно через Node.js. По этой причине корректно подготовленное окружение — фундамент стабильной работы проекта.
Webpack использует возможности Node.js для:
Без установленного Node.js Webpack не может быть запущен.
Node.js — это серверная среда выполнения JavaScript, построенная на движке V8. Она позволяет запускать JavaScript-код вне браузера.
Webpack использует Node.js как платформу исполнения. При запуске команды:
webpack
или:
npx webpack
фактически запускается Node.js-процесс.
npm — стандартный менеджер пакетов, поставляемый вместе с Node.js.
После установки Node.js автоматически становятся доступны:
node
npm
npx
npm отвечает за:
Пример установки Webpack через npm:
npm install webpack webpack-cli --save-dev
Yarn — альтернативный менеджер пакетов, разработанный компанией Meta.
Yarn появился как решение некоторых проблем старых версий npm:
Пример установки Webpack через Yarn:
yarn add webpack webpack-cli --dev
pnpm — современный пакетный менеджер с оптимизированным хранением зависимостей.
Главные особенности pnpm:
Установка Webpack через pnpm:
pnpm add webpack webpack-cli -D
Webpack редко используется изолированно. Типичный современный проект включает десятки или сотни зависимостей:
Пакетный менеджер автоматически:
Разные версии Webpack поддерживают разные версии Node.js.
Для современных версий Webpack обычно требуется актуальная LTS-версия Node.js.
На практике рекомендуется:
| Webpack | Рекомендуемый Node.js |
|---|---|
| Webpack 4 | Node.js 10–14 |
| Webpack 5 | Node.js 16+ |
| Современные экосистемы | Node.js 18+ |
Использование устаревших версий Node.js приводит к:
Node.js выпускается в двух основных ветках:
| Тип | Назначение |
|---|---|
| Current | Новые возможности |
| LTS | Долгосрочная поддержка |
Для Webpack-проектов почти всегда используется именно LTS.
Причины:
Проверка Node.js:
node -v
Проверка npm:
npm -v
Проверка Yarn:
yarn -v
Проверка pnpm:
pnpm -v
Основной способ установки — официальный сайт Node.js.
После установки обычно доступны:
node
npm
npx
npx — инструмент для запуска локально установленных npm-пакетов.
Пример:
npx webpack
Без npx пришлось бы:
npx автоматически ищет пакет внутри:
node_modules/.bin
Наиболее правильный подход:
npm install webpack webpack-cli --save-dev
или:
pnpm add webpack webpack-cli -D
Преимущества:
Пример:
npm install -g webpack webpack-cli
Недостатки:
В современных проектах глобальная установка почти не используется.
Файл:
package.json
содержит описание проекта и зависимостей.
Пример:
{
"name": "webpack-project",
"version": "1.0.0",
"scripts": {
"build": "webpack",
"start": "webpack serve"
},
"devDependencies": {
"webpack": "^5.102.0",
"webpack-cli": "^6.0.1"
}
}
Webpack обычно запускается через scripts:
npm run build
Каждый пакетный менеджер использует собственный lock-файл:
| Менеджер | Lock-файл |
|---|---|
| npm | package-lock.json |
| Yarn | yarn.lock |
| pnpm | pnpm-lock.yaml |
Lock-файлы фиксируют:
Это гарантирует одинаковую установку на:
После установки пакетов создаётся каталог:
node_modules
Внутри находятся:
Webpack активно взаимодействует с этой структурой.
Преимущества:
Недостатки старых версий:
Преимущества:
Недостатки:
Преимущества:
Недостатки:
Современные фронтенд-проекты могут содержать:
pnpm значительно снижает:
Особенно это важно для крупных проектов.
Webpack активно использует переменные окружения.
Примеры:
NODE_ENV=production
или:
NODE_ENV=development
Node.js передаёт эти значения в процесс сборки.
Webpack использует их для:
Webpack поддерживает режимы:
mode: 'development'
и:
mode: 'production'
Часто они связаны с:
NODE_ENV
Пример:
{
"scripts": {
"build": "NODE_ENV=production webpack"
}
}
Unix-системы:
NODE_ENV=production webpack
Windows CMD:
set NODE_ENV=production && webpack
Для кроссплатформенности используют:
cross-env
Пример:
npm install cross-env --save-dev
В проектах часто используется файл:
.nvmrc
Он фиксирует версию Node.js:
18
или:
20.11.1
Это важно для:
nvm позволяет переключаться между версиями Node.js.
Примеры:
nvm install 20
nvm use 20
Это особенно важно при поддержке нескольких Webpack-проектов.
Современные версии Node.js включают:
Corepack
Corepack управляет версиями:
Пример активации:
corepack enable
После этого можно использовать:
pnpm
yarn
без отдельной глобальной установки.
Современный Node.js поддерживает:
Webpack также взаимодействует с обеими системами модулей.
Пример CommonJS:
const path = require('path');
Пример ESM:
import path fr om 'path';
Некоторые версии Node.js имеют ограничения совместимости ESM, поэтому актуальная версия среды крайне важна.
Новые версии Node.js улучшают:
В больших Webpack-проектах это напрямую влияет на:
В CI-системах версия Node.js должна быть строго фиксированной.
Пример для GitHub Actions:
- uses: actions/setup-node@v4
with:
node-version: 20
Несовпадение версий Node.js между:
часто приводит к трудноуловимым ошибкам.
Ошибка:
Unexpected token
или:
Cannot use import statement outside a module
Причина:
Наличие одновременно:
package-lock.json
yarn.lock
pnpm-lock.yaml
создаёт конфликт менеджеров пакетов.
В проекте обычно используется только один пакетный менеджер.
Иногда помогает:
rm -rf node_modules
и повторная установка зависимостей.
На Windows:
rmdir /s node_modules
Webpack-экосистема быстро развивается.
Конфликты часто возникают между:
Поэтому важно контролировать версии пакетов.
Webpack обычно относится к:
"devDependencies"
Причина:
Пример:
{
"devDependencies": {
"webpack": "^5.0.0"
}
}
Основной пакет:
webpack
не содержит полноценного интерфейса командной строки.
CLI находится в отдельном пакете:
webpack-cli
Поэтому обычно устанавливаются оба пакета:
npm install webpack webpack-cli --save-dev
webpack-dev-server запускается как Node.js-приложение.
Он использует:
Производительность dev server напрямую зависит от Node.js и файловой системы ОС.
В крупных проектах используются monorepo:
В таких структурах pnpm особенно эффективен благодаря:
Webpack при этом может использоваться внутри отдельных пакетов monorepo.
Node.js взаимодействует с файловой системой напрямую.
Скорость сборки зависит от:
Особенно чувствительны:
Webpack watch mode использует системные наблюдатели файлов.
В Linux возможны ограничения:
ENOSPC: System lim it for number of file watchers reached
Это связано не с Webpack напрямую, а с лимитами ОС и Node.js watchers.
Большие проекты могут потреблять значительный объём памяти.
Node.js имеет ограничение heap size.
Иногда требуется:
node --max-old-space-size=4096
или:
NODE_OPTIONS=--max-old-space-size=4096
Это особенно актуально для: