npm - 当我使用插入符号时,npm 安装了具有不同补丁版本的模块的两个版本
问题描述
我的项目 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.0.1 被认为等同于 0.0.1。
当一个包的版本以 0 开头时,它被认为是在开发中,并且语义版本控制规则是不同的。当版本为 0.0.X 时,可以预期任何一个数字的增加都会产生重大变化。你可以在这里看到规则。
插入符号范围 ^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
推荐阅读
- unity3d - 使用玩家输入移动刚体
- cuda - 如何知道我的程序在哪个显卡上运行?
- python - 设法在另一个 Django 应用程序中使用数据,但 url 不同
- python - 如何使用 Python 将大文件附加到电子邮件 - Gmail API
- c# - 如何使用 Xamarin 应用程序开发自动注销
- php - 从 Laravel 中的文件夹复制文件
- python - 带属性的计算速度
- kubernetes - Kubernetes configmap 删除现有目录的所有内容
- c - gcc 无法识别某些 SDL 函数
- pyspark - PySpark:Dataframe:Numeric + Null 列值导致 NULL 而不是数值