Дедупликация библиотек в приложении внутри глубоко вложенных узловых модулей
У меня есть приложение, в котором я могу добавить модули как node_modules. Теперь эти модули и приложение используют библиотеку XYZ в качестве модуля узла. Кроме того, эти модули имеют другие модули узлов, которые имеют свою собственную библиотеку XYZ в качестве модуля узлов.
Итак, примерно так выглядит структура моего приложения
Я использую gulp и webpack и пытаюсь кое-как де-дублировать библиотеку XYZ. Я хочу создать задачу, которая будет проходить через это вложенное дерево узловых модулей и создать одну общую версию библиотеки XYZ. Как я могу этого достичь?
Я пытаюсь использовать deDupePlugin, где это все, что я добавил к моей задаче по умолчанию gulp, и она не сработала. Есть что-то, что я пропустил?
plugins: [
new webpack.optimize.DedupePlugin()
// new CommonsChunkPlugin("commons", "commons.js")
],
ИЛИ, есть ли другой способ добиться этого? Любая помощь будет по достоинству оценена
1 ответ
DedupePlugin
будет только дедупликация файлов, которые полностью равны. Ваши модули могут зависеть от разных версий библиотеки, поэтому она не всегда может быть дедуплицирована. И даже когда файлы дедуплицируются, сами модули не будут, поэтому ваше требование одного экземпляра не будет удовлетворено.
Ты можешь использовать resolve.alias
перенаправить все require('libraryXYZ')
вызовы того же экземпляра верхнего уровня.
resolve: {
alias: {
libraryXYZ: require('path').resolve('./node_modules/libraryXYZ'),
},
},
Вот репозиторий сравнения, который я сделал, который демонстрирует различные способы дедупликации модуля.