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

У меня есть приложение, в котором я могу добавлять модули как node_modules. Теперь эти модули и приложение используют библиотеку XYZ в качестве модуля узла. Кроме того, эти модули имеют другие модули узла, которые имеют свою собственную библиотеку XYZ в качестве модуля узла.

Итак, примерно так выглядит структура моего приложения введите здесь описание изображения

Я использую gulp и webpack и пытаюсь кое-как удалить дубликаты библиотеки XYZ. Я хочу построить задачу, которая будет проходить через это вложенное дерево узловых модулей и создавать 1 общую версию библиотеки XYZ. Как я могу этого добиться?

Я пытаюсь использовать deDupePlugin, где это все, что я добавил в свою задачу gulp по умолчанию, и это не сработало. Я что-то пропустил?

plugins: [
            new webpack.optimize.DedupePlugin()
           // new CommonsChunkPlugin("commons", "commons.js")
        ],

ИЛИ, есть ли другой способ добиться этого? Любая помощь будет очень признательна


person Cute_Ninja    schedule 28.10.2015    source источник
comment
Обратите внимание, что эти модули узлов извлекаются из проектов, которые я не контролирую. Таким образом, нет возможности изменить их. Кроме того, наличие нескольких экземпляров библиотеки XYZ создает проблему, поскольку 1 сеанс моего приложения должен иметь только 1 библиотеку XYZ.   -  person Cute_Ninja    schedule 28.10.2015


Ответы (1)


DedupePlugin будет выполнять дедупликацию только полностью идентичных файлов. Ваши модули могут зависеть от разных версий библиотеки, поэтому они не всегда могут подвергаться дедупликации. И даже когда файлы дедуплицированы, сами модули не будут дедуплицированы, поэтому ваше требование одного экземпляра не будет удовлетворено.

Вы можете использовать resolve.alias, чтобы перенаправить все require('libraryXYZ') вызовы на один и тот же экземпляр верхнего уровня.

resolve: {
  alias: {
    libraryXYZ: require('path').resolve('./node_modules/libraryXYZ'),
  },
},

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

person Alexandre Kirszenberg    schedule 28.10.2015