Использование локальных модулей с Webpack 4 объединяет одну и ту же зависимость несколько раз - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь найти хороший способ использования локальных модулей в 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 Ответ

0 голосов
/ 04 мая 2018

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

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

Кому:

  "peerDependencies": {
    "lodash": "^4.17.5"
  }
...