Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在网页包生成中复制相同版本的模块_Javascript_Webpack_Yarnpkg - Fatal编程技术网

Javascript 在网页包生成中复制相同版本的模块

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

我使用Webpack(4.12)开发应用程序,以构建安装了纱线的模块(1.2.1)。它由
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
    时获得尽可能少的版本。
    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重复数据消除
    纱线重复数据消除
    ,以便软件包管理器完成解决重复相关性的工作。然后,您应该会在相关软件包旁边看到“重复数据消除”字样:

    我的-repo@0.0.1
    ├─┬ 模块-1@1.0.0
    │ └── lodash@x.x.x重复数据消除
    ├─┬ 模块-2@A.B.C
    │ └── lodash@x.x.x重复数据消除
    └── lodash@x.x.x

您还可以尝试从头开始删除package-lock.json和
npm
warn安装
所有依赖项,以尽量减少不同版本的重复

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