【问题标题】:npm installs two versions of a module with different patch versions whilst I'm using caret当我使用插入符号时,npm 安装了具有不同补丁版本的模块的两个版本
【发布时间】:2019-07-31 02:05:57
【问题描述】:

我的项目 package.json

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

模块 B 包.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 对吧?

【问题讨论】:

    标签: npm module version


    【解决方案1】:

    这是按照设计。看到这个答案

    npm install with ^ dependency instead of exact match

    这是因为 ^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 := &gt;=0.0.3 &lt;0.0.4,这意味着^0.0.X0.0.X相同

    【讨论】:

    • 是的,我也找到了答案,但忘记更新了。我现在改为使用波浪号“~”来满足我的要求。 Tnx 格式正确的答案!
    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 2022-12-17
    • 1970-01-01
    • 2020-11-03
    • 2022-01-13
    • 2013-05-24
    • 2016-06-12
    • 2019-07-31
    相关资源
    最近更新 更多