我使用 Webpack(4.12)构建应用程序,使用 yarn(1.2.1)安装模块。它由 yarn.lock 控制,使用一系列具有自己的 yarn.lock 文件的内部(公司)模块等。
我发现应用程序包中同一版本的模块被大量复制。例如,lodash 被包含了 9 次。我开始查看版本,并发现这 9 份副本只是 2 个不同版本的 lodash。然后我研究了包含它们的依赖关系,以下是依赖于 lodash 的模块(带别名名称):
括号中的数字表示
我了解,为了避免错误,不同版本的模块可能需要复制,但即使yarn已经在每个模块自己的
我发现应用程序包中同一版本的模块被大量复制。例如,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
安装)。我了解,为了避免错误,不同版本的模块可能需要复制,但即使yarn已经在每个模块自己的
node_modules
下安装了子模块(如@grp/libA / @grp/libB
和@grp/libA / @grp/libC
下的lodash
),webpack也应该看到它们包含相同版本的lodash,至少将其减少到只有4.17.4
和4.17.5
这两个副本,对吗?