Перейти к содержимому
Aback Tools Logo

Как Проверить Версию Webpack: Терминал, package.json и Конфиг

Как проверить вашу версию webpack: команды npx и npm list, изучение lock-файла, чтение webpack.version в конфиге или плагинах, диагностика конфликтов версий и различия между webpack 4 и 5.

DH
Tutorials & How-Tos12 мин чтения2,600 слов

Знать, какая версия webpack работает в вашем проекте, важнее, чем осознаёт большинство разработчиков. Несовпадения версий между webpack, его лоадерами и плагинами — одна из самых частых причин загадочных ошибок сборки — ошибок, которые исчезают, как только вы выравниваете всё на одну мажорную версию. Это руководство охватывает все способы проверки версии webpack: от одной команды в терминале до изучения lock-файлов, чтения конфига webpack и понимания того, что номер версии на самом деле значит для вашей сборки.

< 5sВремя на проверку версииЛюбым способом ниже
5Мажорных версий webpackот v1 до v5
4→5Самая частая миграцияКритические изменения требуют осторожности

Почему версия webpack важна

Пять мажорных версий webpack не являются взаимозаменяемыми. Каждый мажорный релиз вносил критические изменения в синтаксис конфигурации, совместимость лоадеров и API плагинов. Конфиг webpack 4 не будет работать с webpack 5 без модификаций, а лоадеры, выпущенные для webpack 3, могут молча давать сбой или выдавать неверный результат в webpack 4+.

Помимо совместимости конфигурации, версия webpack влияет на производительность. Webpack 5 представил персистентное кэширование, Module Federation и улучшенное tree-shaking, которые могут значительно сократить время сборки и размеры бандлов по сравнению с webpack 4. Если вы отлаживаете медленную сборку или расследуете регрессию размера бандла, подтверждение версии — первый диагностический шаг.

Когда конфликты версий вызывают ошибки

  • Несовместимость лоадеров - `babel-loader` v8 нацелен на webpack 4; использование его с webpack 5 без обновления приводит к молчаливой неправильной настройке.
  • Несовпадения API плагинов - плагины, встраивающиеся в компилятор webpack, используют API, изменившееся между v4 и v5. Плагин, собранный под v4, упадёт на объекте компилятора v5.
  • Конфликты peer-зависимостей - инструменты вроде `webpack-dev-server`, `html-webpack-plugin` и `mini-css-extract-plugin` публикуют версии, привязанные к конкретным мажорным версиям webpack.
  • Ошибки схемы css-loader - css-loader v5 и v6 имеют строгую валидацию схемы; несовпадение версии с webpack порождает ошибку «ValidationError: Invalid options object».

Note

Если вы недавно обновили Node.js и сборка webpack начала падать, стоит также проверить матрицу совместимости версий Node.js. Webpack 4 отказался от поддержки Node.js ниже v6; webpack 5 требует Node.js 10.13 или выше. Большинство активно поддерживаемых проектов теперь требуют Node.js 14+.

Как проверить версию webpack из терминала

Терминал — самый быстрый и надёжный способ проверить вашу версию webpack. Есть три команды, которые стоит знать, каждая подходит для чуть иной ситуации.

Webpack устанавливается локально в ваш проект как devDependency. Глобально установленная версия, если она есть, почти никогда не является той, которую сборка использует на самом деле.

- Документация Webpack

Локальная версия проекта (самая надёжная)

Ваш проект почти наверняка устанавливает webpack как локальную devDependency, а не глобальный пакет. Чтобы проверить версию, которую ваши скрипты сборки используют на самом деле, выполните `npx` или `./node_modules/.bin/webpack` прямо из корня проекта. Эти команды обходят любую глобальную установку webpack и сообщают локально установленную версию.

Проверка локально установленной версии webpack
bash
# Самый надёжный способ - использует локальную установку node_modules
npx webpack --version

# Альтернативный вызов по пути
./node_modules/.bin/webpack --version

# С yarn
yarn webpack --version

# Pnpm
pnpm exec webpack --version

Команда npm list

`npm list webpack` запрашивает ваши локальные `node_modules` и выводит установленную версию вместе с её положением в дереве зависимостей. Это полезно, когда вы хотите увидеть не только версию, но и какой пакет требовал webpack как peer-зависимость — частый источник конфликтов версий, когда инструмент сборки зависит от конкретного диапазона webpack.

Проверка версии webpack через npm list
bash
# Показать версию webpack в локальных node_modules
npm list webpack

# Показать все пакеты в дереве, зависящие от webpack
npm list webpack --all

# Эквивалент в yarn
yarn list --pattern webpack

# Эквивалент в pnpm
pnpm list webpack

Глобально установленная версия

Если вы установили webpack глобально через `npm install -g webpack webpack-cli`, вы можете проверить эту версию отдельно. Имейте в виду: глобальная версия редко бывает той, что используют сборки вашего проекта — большинство скриптов сборки вызывают webpack через скрипты `package.json`, которые всегда разрешаются в локальную установку.

Проверка глобально установленного webpack
bash
# Проверка глобальной установки
webpack --version

# Или явно из глобального пути
npm list -g webpack

Warning

Никогда не считайте, что вывод `webpack --version` (без `npx`) — это версия, которую использует ваш проект. Если ваш PATH указывает на глобально установленный webpack, сообщённая версия может полностью отличаться от той, что в `node_modules` вашего проекта. Для точного результата всегда используйте `npx webpack --version` из корня проекта.

Как найти версию webpack в package.json

Файл `package.json` вашего проекта перечисляет диапазон версий webpack, который проект объявил как зависимость. Это не то же самое, что установленная версия — это диапазон, указанный при добавлении webpack, и фактически установленная версия может быть любой версией внутри этого диапазона.

1

Откройте package.json и посмотрите в devDependencies

Webpack почти всегда указан в `devDependencies`, а не в `dependencies`. Откройте ваш `package.json` и найдите ключ `"webpack"` в блоке `devDependencies`. Значение — это semver-диапазон: `"^5.88.0"` означает «любая версия, совместимая с 5.88.0», а `"5.88.0"` (без карета) фиксирует именно эту версию.

Типичная запись webpack в package.json
json
{
  "devDependencies": {
    "webpack": "^5.88.0",
    "webpack-cli": "^5.1.4",
    "webpack-dev-server": "^4.15.1"
  }
}
2

Проверьте lock-файл для точной разрешённой версии

Диапазон в `package.json` сообщает заявленное ограничение. Lock-файл — `package-lock.json`, `yarn.lock` или `pnpm-lock.yaml` — сообщает точную версию, которая была фактически установлена. Найдите `"webpack"` в вашем lock-файле, чтобы увидеть разрешённую строку версии. Это версия, которую установит каждая машина, клонирующая репозиторий, — самая авторитетная запись о том, что исполняется.

Поиск точной версии в lock-файлах
bash
# В package-lock.json (npm)
grep '"webpack"' package-lock.json | head -5

# В yarn.lock
grep 'webpack@' yarn.lock | head -5

# В pnpm-lock.yaml
grep 'webpack' pnpm-lock.yaml | head -10
3

Проверьте диапазоны зависимостей вашего package.json

Если вы хотите провести аудит здоровья всех зависимостей в вашем `package.json` — не только webpack — проверка здоровья зависимостей package.json от Aback Tools анализирует весь ваш список зависимостей на предмет рискованных паттернов версий, плавающих диапазонов, устаревших пакетов и пробелов воспроизводимости. Вставьте ваш `package.json` и получите практический отчёт о здоровье за секунды.

Проверка здоровья зависимостей package.json

Вставьте package.json, чтобы обнаружить рискованные диапазоны версий, устаревшие зависимости и пробелы воспроизводимости - полностью в браузере без загрузок.

Open tool

Проверка версии webpack из конфига или скрипта

Иногда нужно знать версию webpack во время сборки — например, чтобы применить другую ветку конфигурации в зависимости от мажорной версии или логировать диагностическую информацию в CI-пайплайне. Webpack exposes версию как свойство объекта компилятора, а сам пакет webpack экспортирует строку `version`.

Чтение версии в webpack.config.js

webpack.config.js - логирование или ветвление по версии
javascript
const webpack = require('webpack');

// Строка версии доступна напрямую
console.log('Webpack version:', webpack.version);

// Используйте её для условного применения конфигурации
const isWebpack5 = parseInt(webpack.version, 10) >= 5;

module.exports = {
  // ...
  plugins: [
    isWebpack5
      ? new webpack.ids.DeterministicModuleIdsPlugin()
      : new webpack.HashedModuleIdsPlugin(),
  ],
};

Чтение версии в собственном плагине или лоадере

Внутри плагина webpack объект компилятора несёт версию webpack через `compiler.webpack.version`. Это самая безопасная программная проверка, потому что она читает версию того экземпляра webpack, который вызвал плагин, — а не той, что случайно оказалась в `node_modules`.

Чтение версии внутри плагина webpack
javascript
class MyPlugin {
  apply(compiler) {
    // compiler.webpack доступен в webpack 5+
    const version = compiler.webpack?.version ?? webpack.version;
    console.log('Running on webpack', version);

    compiler.hooks.done.tap('MyPlugin', (stats) => {
      // Build complete
    });
  }
}

Tip

Если вы пишете плагин или лоадер, который должен поддерживать и webpack 4, и webpack 5, проверяйте `compiler.webpack` — он есть в v5, но не в v4. Используйте это как сигнал версии, а не разбор строки версии, поскольку разбор строк ненадёжен при наличии pre-release идентификаторов.

Проверка версии в CI-окружении

В CI-пайплайне самый чистый способ логировать версию webpack — добавить шаг, выполняющий `npx webpack --version` и захватывающий вывод. Это даёт локально установленную версию из тех самых `node_modules`, которые будет использовать сборка, и она появляется в журнале пайплайна при каждом запуске — полезно для отладки сбоев сборки, проявляющихся только на отдельных runner.

GitHub Actions - логирование версии webpack перед сборкой
yaml
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-node@v4
    with:
      node-version: '20'
  - run: npm ci
  - name: Log webpack version
    run: npx webpack --version
  - name: Build
    run: npm run build

Сравнение мажорных версий webpack

Понимание различий между мажорными версиями webpack помогает решить, подходит ли ваша текущая версия проекту и чего ожидать при миграции. Вот краткое сравнение возможностей и ландшафта совместимости всех пяти мажорных релизов.

ВерсияТребуемый Node.jsСтатусКлючевая особенность
webpack 1Любой (очень старый)⛔ EOLИзначальный CommonJS-бандлер
webpack 2Node.js ≥4⛔ EOLTree-shaking ES-модулей
webpack 3Node.js ≥6⛔ EOLScope hoisting, динамические импорты
webpack 4Node.js ≥6⚠️ Только поддержкаРежим нулевой конфигурации, производительность
webpack 5Node.js ≥10.13✓ АктивнаModule Federation, персистентный кэш

Webpack 4 против webpack 5 - ключевые отличия

  • Персистентный кэш - webpack 5 кэширует результаты компиляции на диск между запусками; тёплый кэш может сделать пересборки в 5-10 раз быстрее, чем webpack 4.
  • Module Federation - webpack 5 представил Module Federation для совместного использования кода между независимо развёрнутыми фронтендами в рантайме.
  • Asset-модули - webpack 5 заменяет `file-loader`, `url-loader` и `raw-loader` встроенными типами asset-модулей (`asset/resource`, `asset/inline` и т.д.).
  • Полифиллы Node.js удалены - webpack 5 больше не добавляет полифиллы для модулей ядра Node.js автоматически. Проекты, зависевшие от полифиллов для `buffer`, `path`, `stream` и т.д., должны добавить их явно.
  • Долгосрочное кэширование - webpack 5 по умолчанию использует детерминированные ID чанков, создавая стабильные имена файлов между сборками, что повышает частоту попаданий в кэш браузера.

Note

Webpack 4 всё ещё широко используется и получает отдельные исправления безопасности, но без новых функций. Если вы начинаете новый проект в 2026 году, используйте webpack 5. Если вы на webpack 4 и стоимость миграции высока, остаться на 4 — легитимный выбор, но спланируйте обновление до того, как поддержка инструментов для плагинов webpack 4 начнёт ослабевать.

Устранение конфликтов версий webpack

Конфликты версий между webpack и его экосистемой — самая частая причина запутанных ошибок сборки. Большинство этих ошибок сводится к одной из трёх причин: несколько копий webpack в `node_modules`, лоадер или плагин, собранный под другую мажорную версию, либо несовпадение диапазона peer-зависимости.

Несколько копий webpack в node_modules

Возможно — и, что удивительно, часто встречается, — иметь более одной копии webpack, установленной в вашем проекте. Это происходит, когда зависимость объявляет peer-зависимость от webpack с другим диапазоном мажорной версии, чем использует ваш проект. Результат — два несовместимых экземпляра webpack, из-за чего плагины молча дают сбой или падают, потому что зарегистрированы в одном экземпляре, а вызываются другим.

Обнаружение нескольких установок webpack
bash
# Проверить несколько записей webpack в полном дереве зависимостей
npm list webpack --all

# Ищите более одного уникального номера версии в выводе
# например, одновременное появление [email protected] и [email protected]
# - признак конфликтующих peer-зависимостей

Разрешение конфликтов peer-зависимостей

Когда `npm list webpack --all` показывает несколько версий webpack, посмотрите, какой пакет подтягивает старую версию. Обновите этот пакет до версии, поддерживающей вашу мажорную версию webpack, либо используйте поле `resolutions` (Yarn) или `overrides` (npm 8+), чтобы принудительно использовать одну версию webpack всеми пакетами.

Принудительная единая версия webpack - overrides npm
json
{
  "overrides": {
    "webpack": "^5.88.0"
  }
}
Принудительная единая версия webpack - resolutions Yarn
json
{
  "resolutions": {
    "webpack": "^5.88.0"
  }
}

Валидация semver-диапазонов

Диапазоны peer-зависимостей вроде `"webpack": "^4 || ^5"` и `"webpack": ">=4.41.0 <6"` — корректные semver-выражения, но их легко неверно истолковать. Валидатор semver от Aback Tools проверяет любую строку версии или выражение диапазона по спецификации Semver 2.0.0 — полезно, когда вы пишете библиотеку, объявляющую диапазон peer-зависимости webpack, и хотите убедиться, что выражение сформировано правильно.

Warning

Если вы используете `npm install --legacy-peer-deps`, чтобы обойти ошибки peer-зависимостей, вы можете молча устанавливать несовместимые версии. Разрешите реальный конфликт, а не подавляйте ошибку — сборка может сначала работать, но выдавать тонкие баги или падать в продакшене, когда выполнится путь кода, зависящий от несовместимого пакета.

Валидатор Semver

Проверяйте любую строку семантической версии или выражение диапазона по спецификации Semver 2.0.0 - мгновенно в вашем браузере.

Open tool

Лучшие практики управления версиями webpack

Знать текущую версию webpack — это только начало. Управлять ею хорошо — чтобы версия оставалась согласованной между окружениями, была видна каждому контрибьютору и обновлялась намеренно, а не случайно, — требует нескольких простых практик.

  1. Фиксируйте точные версии в devDependencies - используйте `"webpack": "5.88.2"` вместо `"^5.88.0"` для критичных для сборки инструментов. Плавающие диапазоны позволяют патчам менять установленную версию между запусками `npm install` на разных машинах, делая вывод сборки недетерминированным.
  2. Коммитьте lock-файл - `package-lock.json`, `yarn.lock` или `pnpm-lock.yaml` должны быть в системе контроля версий. Без него контрибьюторы и CI-серверы установят разные патч-версии.
  3. Логируйте версию в CI - добавьте шаг `npx webpack --version` перед каждой задачей сборки. Версия появляется в каждом CI-логе, что упрощает соотнесение сбоев сборки с изменениями версии.
  4. Аудит зависимостей после обновлений - обновив webpack, сразу выполните `npm list webpack --all`, чтобы убедиться, что не затесались вторичные копии, и `npx webpack --version`, чтобы убедиться, что новая версия та, что использует ваша сборка.
  5. Читайте руководство по миграции перед обновлением - у каждой мажорной версии webpack есть официальное руководство по миграции на `webpack.js.org`. Читайте его до обновления — а не после того, как сборка сломается.

Tip

Когда коллега сообщает об ошибке сборки, которую вы не можете воспроизвести, первый вопрос: что выводит `npx webpack --version` на его машине? Дрейф версий между машинами разработчиков — одна из самых частых причин сбоев сборки вида «работает на моей машине» в JavaScript-проектах.

Бьютифаер JavaScript

Форматируйте и отступайте минифицированный или беспорядочный JavaScript в браузере - полезно при инспекции выходных бандлов webpack или сгенерированных конфигов.

Open tool

Key takeaways

  • Используйте `npx webpack --version` из корня проекта, чтобы проверить локально установленную версию — никогда не полагайтесь на глобальный вывод `webpack --version`.
  • `npm list webpack` показывает установленную версию и её положение в дереве зависимостей; `npm list webpack --all` выявляет наличие нескольких конфликтующих копий.
  • Lock-файл (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`) содержит точную разрешённую версию — он авторитетнее диапазона в `package.json`.
  • Webpack 5 — текущий активный релиз; webpack 4 только поддерживается. Ключевые нововведения webpack 5: персистентный кэш, Module Federation и встроенные asset-модули.
  • Несколько копий webpack в `node_modules` приводят к молчаливым сбоям плагинов — обнаруживайте через `npm list webpack --all` и исправляйте через `overrides` (npm) или `resolutions` (Yarn).
  • Фиксируйте точные версии webpack в devDependencies и коммитьте lock-файл, чтобы каждый разработчик и CI-runner использовали одну и ту же версию.
  • При отладке ошибки сборки всегда сначала проверяйте версию webpack — несовпадение версий между webpack и лоадером или плагином является причиной чаще, чем предполагает сообщение об ошибке.

Частые вопросы

Run `npx webpack --version` from your project root directory. This takes under five seconds and reports the exact version installed in your local `node_modules` - the version your build scripts actually use. Make sure to run it from the project root, not from a subdirectory, so npx resolves to the correct local installation rather than a parent directory or global install.

`webpack --version` (without npx) resolves webpack from your system PATH, which may point to a globally installed version. `npx webpack --version` resolves webpack from the local `node_modules` in your current directory. Most projects install webpack locally as a devDependency, so the local version is what your build uses. Always prefer `npx webpack --version` when you need to know which version is actually building your project.

Require the webpack package at the top of your config and read `webpack.version`. For example: `const webpack = require("webpack"); console.log(webpack.version);`. Inside a plugin, use `compiler.webpack.version` instead - this reads the version of the webpack instance that invoked the plugin rather than whatever version is in `node_modules`, which is safer in monorepo setups where multiple webpack versions may coexist.

Your `package.json` contains a semver range like `"^5.88.0"`, which permits any compatible version. For the exact installed version, check your lock file: search for `"webpack"` in `package-lock.json` (npm), `webpack@` in `yarn.lock`, or `webpack:` in `pnpm-lock.yaml`. The resolved version string in the lock file is what was actually downloaded and is the authoritative version across all machines that install from that lock file.

Multiple webpack versions in your dependency tree means two or more packages installed different webpack majors as nested dependencies. This causes conflicts because plugins and loaders hook into the webpack compiler object - if different parts of your build use different webpack instances, plugins registered against one will not run in the other. Fix this by updating the conflicting package to a version that supports your webpack major, or use the `overrides` field in package.json (npm 8+) to force a single version.

Use webpack 5. It is the only actively developed version and brings substantial improvements: persistent disk caching for fast rebuilds, Module Federation for micro-frontend architectures, built-in asset modules that replace file-loader and url-loader, and better tree-shaking. Webpack 4 is in maintenance mode and receives only security fixes. New tooling and plugins increasingly require webpack 5, and the webpack 4 ecosystem is gradually eroding.

css-loader v5 and above use strict option schema validation and are designed for webpack 5. If you run css-loader v5+ with webpack 4, you will see a "ValidationError: Invalid options object. CSS Loader has been initialized using an options object that does not match the API schema" error. The fix is either to downgrade css-loader to the version compatible with your webpack major, or to upgrade webpack to v5. Check the css-loader release notes for the exact webpack peer dependency range each version targets.

Add a `run: npx webpack --version` step in your CI configuration immediately after the `npm ci` or `npm install` step. In GitHub Actions, add it as a named step - "Log webpack version" - so the version is clearly visible in the job log. This takes seconds and gives you a permanent record of the webpack version used in every build, which is invaluable when diagnosing build regressions that appeared after a dependency update.

ShareXLinkedIn