Использование локальных модулей с Webpack 4 объединяет одну и ту же зависимость несколько раз

Я пытаюсь найти хороший способ использования локальных модулей в npm или способ структурирования большого приложения, чтобы его можно было объединить в модули, которые могут находиться или не находиться в отдельном хранилище.

Каждый локальный модуль имеет свой собственный package.json и установленные зависимости.

Мои требования состоят в том, чтобы модули были написаны на ES6 и скомпилированы только как часть строящегося основного проекта (поэтому у меня не так много зависимостей, которые постоянно создаются независимо).

Структура проекта

/root
  /main-module 
    ... main js files <- entry point
    webpack.config.js
    package.json
  /module-1
    ... module 1 js files
    package.json
  /module-2
    ... module 2 js files
    package.json
  /module-3
    ... module 3 js files
    package.json

В настоящее время я изучаю использование локальных модулей, указав локальный файл в моем package.json следующим образом:

...
"dependencies": {
  "lodash": "^4.17.10",
  "module-1": "../module-1",
  "module-2": "../module-2",
  "module-3": "../module-3",
  "normalize.css": "^8.0.0"
}
...

Вы можете увидеть весь проект здесь: https://github.com/SamStonehouse/webpack-local-modules-test

Я использую веб-пакет с загрузчиком babel, который не нуждается в дополнительной настройке для использования этой формы и даже наблюдает за файлом модуля на предмет изменений и перестроений, когда они завершены, что удивительно.

Проблема: после сборки lodash включается в сборку 4 раза, по одному для каждого модуля, которому это требуется, даже если все они требуют одинаковой версии и все исходные коды компилируются одновременно.

  • Я пытался использовать splitChunkPlugin, но безрезультатно
  • Я попытался установить lodash как devDependency в локальных модулях (это было то, чего я не хотел делать, но это все равно не работало)

У кого-нибудь есть решение для этого?

Или альтернативный способ объединения локальных модулей подобным образом

1 ответ

Измените каждый из модулей так, чтобы вместо прямой зависимости lodash использовался как одноранговая зависимость. Так что в package.json файл, измените это:

  "dependencies": {
    "lodash": "^4.17.5"
  }

Для того, чтобы:

  "peerDependencies": {
    "lodash": "^4.17.5"
  }
Другие вопросы по тегам