Использование локальных модулей с 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"
}