Дедупликация библиотек в приложении внутри глубоко вложенных узловых модулей

У меня есть приложение, в котором я могу добавить модули как 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'),
  },
},

Вот репозиторий сравнения, который я сделал, который демонстрирует различные способы дедупликации модуля.

Другие вопросы по тегам