我的项目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
相匹配,对吗?
答案 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.X
与0.0.X
相同