Javascript 在网页包生成中复制相同版本的模块
我使用Webpack(4.12)开发应用程序,以构建安装了纱线的模块(1.2.1)。它由Javascript 在网页包生成中复制相同版本的模块,javascript,webpack,yarnpkg,Javascript,Webpack,Yarnpkg,我使用Webpack(4.12)开发应用程序,以构建安装了纱线的模块(1.2.1)。它由warn.lock控制,使用具有自己的warn.lock文件等的内部(公司)模块列表 我发现相同版本的模块在应用程序包中重复很多。如lodash被收录9次。我开始查看这些版本,发现这9个副本只是lodash的两个不同版本。然后我研究了哪些依赖项包括它们,下面是对lodash(带别名)的哪些模块依赖项的结果: 括号中的数字显示了package.json中说明的版本,以及node_modules中的实际版本(与w
warn.lock
控制,使用具有自己的warn.lock
文件等的内部(公司)模块列表
我发现相同版本的模块在应用程序包中重复很多。如lodash
被收录9次。我开始查看这些版本,发现这9个副本只是lodash
的两个不同版本。然后我研究了哪些依赖项包括它们,下面是对lodash
(带别名)的哪些模块依赖项的结果:
括号中的数字显示了package.json
中说明的版本,以及node_modules
中的实际版本(与warn install
一起安装)
我知道可能需要复制不同版本的模块以避免错误,但即使yarn在每个模块中都安装了子模块(如
@grp/libA/@grp/libB
和@grp/libA/@grp/libC
),webpack是否应该看到它们包含相同版本的lodash,并至少将其减少为4.17.4
和4.17.5
的两个副本?在一个使用以下结构的项目中,我遇到了相同的问题:
src/
node_modules/
|_ ...
|_ ui
|_ node_modules
|_ src/
为了防止复制供应商,我使用了resolve
属性,例如:
{
resolve: {
modules: [
path.resolve(__dirname, 'node_modules'),
path.resolve(__dirname, 'node_modules/ui/node_modules'),
],
},
}
上有更多详细信息,但总而言之,它强制Webpack按此确切顺序检查这些文件夹中的依赖项
希望有帮助!:) 以下是一些步骤,可以帮助您减少Web包构建中的重复包。让我们以
lodash
捆绑多次为例
- 根据
手动升级或降级软件包,以便在lodash
目录中运行src
或npm ls-lodash
时获得尽可能少的版本。纱线列表lodash
的输出示例: 我的-repo@0.0.1npm
├─┬ 模块-1@1.0.0
│ └── lodash@x.x.x
├─┬ 模块-2@A.B.C
│ └── lodash@x.x.x
└── lodash@x.x.x - 然后,运行
或npm重复数据消除
,以便软件包管理器完成解决重复相关性的工作。然后,您应该会在相关软件包旁边看到“重复数据消除”字样: 我的-repo@0.0.1纱线重复数据消除
├─┬ 模块-1@1.0.0
│ └── lodash@x.x.x重复数据消除
├─┬ 模块-2@A.B.C
│ └── lodash@x.x.x重复数据消除
└── lodash@x.x.x
npm
或warn安装
所有依赖项,以尽量减少不同版本的重复
{
resolve: {
modules: [
path.resolve(__dirname, 'node_modules'),
path.resolve(__dirname, 'node_modules/ui/node_modules'),
],
},
}