Дублирующие модули одной и той же версии в сборке веб-пакета - PullRequest
0 голосов
/ 29 июня 2018

Я работаю над приложением, используя Webpack (4.12) для сборки модулей, установленных с пряжа (1.2.1). Он контролируется yarn.lock, используйте список внутренних (корпоративных) модулей, которые имеют свои собственные yarn.lock файлы и т. Д.

Я обнаружил, что модули одной версии многократно дублируются в комплекте приложений. Как lodash включается 9 раз . Я начал изучать версии и обнаружил, что 9 копий - это всего лишь 2 разные версии lodash. Затем я посмотрел, какие зависимости включили их, вот результат для каких модулей зависит от lodash (с псевдонимами):

(^4.16.4 / 4.17.4) application
(^4.17.2 / 4.17.5) @grp/libA
(^4.16.4 / 4.17.4) @grp/libA / @grp/libB
(^4.16.4 / 4.17.4) @grp/libA / @grp/libC
(^4.17.4 / 4.17.5) @grp/libD
(^4.16.4 / 4.17.4) @grp/libD / @grp/libE
(^4.17.2 / 4.17.5) @grp/libF
(^4.16.4 / 4.17.4) @grp/libF / @grp/libG
(^4.16.4 / 4.17.4) @grp/libF / @grp/libG

Числа в скобках показывают версию, указанную в package.json, и фактическую версию, указанную в node_modules (установлена ​​с yarn install).

Я понимаю, что модули разных версий, возможно, придется дублировать, чтобы избежать ошибок, но даже если в пряжу установлены подмодули (например, lodash в @grp/libA / @grp/libB и @grp/libA / @grp/libC), в каждом модуле есть собственные node_modules, Разве веб-пакеты не должны видеть, что они включают одну и ту же версию lodash и, по крайней мере, уменьшить ее до двух копий для 4.17.4 и 4.17.5?

1 Ответ

0 голосов
/ 26 февраля 2019

У меня была такая же проблема в проекте, использующем следующую структуру:

src/
node_modules/
  |_ ...
  |_ ui
      |_ node_modules
      |_ src/

Чтобы избежать дублирования поставщиков, я использовал свойство resolve, например:

{
    resolve: {
        modules: [
            path.resolve(__dirname, 'node_modules'),
            path.resolve(__dirname, 'node_modules/ui/node_modules'),
        ],
    },
}

Более подробная информация доступна на официальном документе , но, если подвести итог, он заставляет Webpack проверять зависимости от этих папок в этом точном порядке.

Надеюсь, это поможет! :)

...