为什么 npm 在单独安装时会安装同一依赖项的两个不同版本



场景 1

终端:视窗cmd

节点版本v8.0.0

NPM版本v5.5.1

我有一个特别提到的package.json

"@swimlane/ngx-charts": "^7.3.0",
"@swimlane/ngx-graph": "^4.3.0",

这些对d3-scale有次依赖。

在此方案中,npm install命令将安装d3-scale: v2.0.0其中包含dist/文件夹。(注意:我在Angular应用程序的systemjs.config.js文件中使用d3-scale/dist(

场景 2

终端: 适用于 Linux 的 Windows 子系统 (bash for ubuntu for windows(

节点版本v8.11.1

npm 版本v5.6.0

我使用相同的package.json执行npm install,这次它为我提供了d3-scale: v1.0.7具有build/文件夹,而不是dist/d3 scale上的快速比较。

现在由于这种差异,我不得不更改systemjs.config.js以指向本地机器的build

如果应用程序部署在服务器或云上,我不确定它可能在node_modules中下载哪个d3-scale,我可能必须为其提交修补程序。

问题

为什么首先存在差异?是什么原因造成的?

NPM 团队似乎解决了 v5.6.0 中的一个问题。

完全跨平台的package-lock.json。安装失败的可选 对一个平台的依赖不再将其从依赖关系中删除 树,这意味着现在应该生成 package-lock.json 跨平台一致!

因此,请尝试将您的Windows NPM升级到v5.6.0。它现在应该可以工作了。

最新更新