在我使用插入符号的同时,npm安装了具有不同补丁版本的模块的两个版本

时间:2019-07-18 02:08:53

标签: npm module version

我的项目package.json

dependencies: {
    A: "^0.0.2",
    B: "^0.0.1"
}

模块B package.json

dependencies: {
    A: "^0.0.1",
}

当我为项目运行nmp install时,它将安装两次模块A。一次进入顶层(0.0.2版),一次嵌套在模块B 中(0.0.1版):

project/node_modules/A                   <--0.0.2
project/node_modules/B/node_modules/A    <--0.0.1

但是我在两个package.json文件中都使用了 ^ 。那么,为什么即使我重新安装模块B时也没有使用模块A的顶层安装而不是获得模块A的嵌套版本?

毕竟A@^0.0.1应该与A@0.0.2相匹配,对吗?

1 个答案:

答案 0 :(得分:1)

这是根据设计。看到这个答案

npm install with ^ dependency instead of exact match

  

发生这种情况是因为^ 0.0.1被认为等于0.0.1。

     

当程序包的版本以0开头时,则认为它正在开发中,语义版本控制规则也不同。当版本为0.0.X时,任何一个数字的增加都可能会有重大变化。您可以在此处查看规则。

     

Caret Ranges ^ 1.2.3 ^ 0.2.5 ^ 0.0.4

     

允许所做的更改不会修改[major,minor,patch]元组中最左边的非零数字。换句话说,这允许对1.0.0及更高版本的补丁程序和次要更新,对于0.X> = 0.1.0版本的补丁程序更新以及对0.0.X版本的更新。

     

当您增加次要版本时,您可能会看到插入符号,但是它也会包含上面提到的特殊规则。当您增加主版本时,“常规”规则开始适用。

您还可以在下面的页面中查看更多详细信息

https://docs.npmjs.com/misc/semver#caret-ranges-123-025-004

它清楚地显示了^0.0.3 := >=0.0.3 <0.0.4,这意味着^0.0.X0.0.X相同