【问题标题】:How do I install the latest minor version of a package on npm?如何在 npm 上安装软件包的最新次要版本?
【发布时间】:2017-01-24 18:34:21
【问题描述】:

例如:

  • 我安装了 2.0.0package-name 版本。
  • 具有相同主要版本的最新次要版本是2.1.2
  • 最新的主要版本(如果我运行npm install package-name@latest 会安装4.3.0

如何安装没有重大更改的最新软件包?

【问题讨论】:

    标签: npm semantic-versioning


    【解决方案1】:

    Npm 使用 semver,所以你可以使用各种东西来接近你的目标

    看看官方的documentation,你可以使用类似的东西:

    npm install package-name@">=2.1.2 <2.2.0"
    

    此外,还有很多种类的范围,因此您可以使用这种形式 Advanced Range Syntax 如您所见,这是一个来自 semver 存储库的有趣摘录示例,最后是您的答案:

    高级范围语法去糖到原始比较器 确定性方法。

    高级范围可以以与原始范围相同的方式组合 使用空格或 || 的比较器。连字符范围 X.Y.Z - A.B.C

    指定一个包含集。

    1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
    

    如果提供部分版本作为包含的第一个版本 范围,然后用零替换缺失的部分。

    1.2 - 2.3.4 := >=1.2.0 <=2.3.4
    

    如果提供部分版本作为 包含范围,然后是所有以提供的部件开头的版本 元组的 被接受,但没有比 提供元组部分。

    1.2.3 - 2.3 := >=1.2.3 <2.4.0
    1.2.3 - 2 := >=1.2.3 <3.0.0
    

    X 范围 1.2.x 1.X 1.2.* *

    X、x 或 * 中的任何一个都可用于“代替”其中一个数字 [major, minor, patch] 元组中的值。

    * := >=0.0.0 (Any version satisfies)
    1.x := >=1.0.0 <2.0.0 (Matching major version)
    1.2.x := >=1.2.0 <1.3.0 (Matching major and minor versions)
    

    部分版本范围被视为 X-Range,因此特殊的 字符实际上是可选的。

    "" (empty string) := * := >=0.0.0
    1 := 1.x.x := >=1.0.0 <2.0.0
    1.2 := 1.2.x := >=1.2.0 <1.3.0
    

    波浪号范围 ~1.2.3 ~1.2 ~1

    如果指定了次要版本,则允许补丁级别的更改 比较器。如果没有,则允许进行次要级别的更改。

    ~1.2.3 := >=1.2.3 <1.(2+1).0 := >=1.2.3 <1.3.0
    ~1.2 := >=1.2.0 <1.(2+1).0 := >=1.2.0 <1.3.0 (Same as 1.2.x)
    ~1 := >=1.0.0 <(1+1).0.0 := >=1.0.0 <2.0.0 (Same as 1.x)
    ~0.2.3 := >=0.2.3 <0.(2+1).0 := >=0.2.3 <0.3.0
    ~0.2 := >=0.2.0 <0.(2+1).0 := >=0.2.0 <0.3.0 (Same as 0.2.x)
    ~0 := >=0.0.0 <(0+1).0.0 := >=0.0.0 <1.0.0 (Same as 0.x)
    ~1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0 Note that prereleases in the 1.2.3 version will be allowed, if they are greater than or equal
    

    到 beta.2。因此,1.2.3-beta.4 将被允许,但 1.2.4-beta.2 将 不是,因为它是不同 [major, minor, patch] 的预发布版本 元组。

    插入符号范围 ^1.2.3 ^0.2.5 ^0.0.4

    允许不修改最左边非零数字的更改 [主要,次要,补丁] 元组。换句话说,这允许补丁和 1.0.0及以上版本的小更新,版本的补丁更新 0.X >=0.1.0,0.0.X 版没有更新。

    许多作者将 0.x 版本视为 x 是主要版本 “重大变化”指标。

    当作者可能进行重大更改时,插入符号范围是理想的 在 0.2.4 和 0.3.0 版本之间,这是一种常见的做法。然而, 它假定在​​ 0.2.4 和 0.2.4 之间不会有重大变化 0.2.5。根据普遍观察到的做法,它允许被假定为附加(但不会破坏)的更改。

    ^1.2.3 := >=1.2.3 <2.0.0
    ^0.2.3 := >=0.2.3 <0.3.0
    ^0.0.3 := >=0.0.3 <0.0.4
    ^1.2.3-beta.2 := >=1.2.3-beta.2 <2.0.0 Note that prereleases in the 1.2.3 version will be allowed, if they are greater than or equal
    

    到 beta.2。因此,1.2.3-beta.4 将被允许,但 1.2.4-beta.2 将 不是,因为它是不同 [major, minor, patch] 的预发布版本 元组。 ^0.0.3-beta := >=0.0.3-beta

    在解析插入符号范围时,缺少的补丁值对 数字 0,但将允许在该值范围内具有灵活性,即使 主要和次要版本都是 0。

    ^1.2.x := >=1.2.0 <2.0.0
    ^0.0.x := >=0.0.0 <0.1.0
    ^0.0 := >=0.0.0 <0.1.0
    

    缺少的次要和补丁值将脱糖为零,但也允许 这些值的灵活性,即使主要版本为零。

    ^1.x := >=1.0.0 <2.0.0
    ^0.x := >=0.0.0 <1.0.0
    

    所以总结你的例子可能是

    npm install package-name@"^2.1.x"
    

    【讨论】:

    • 这应该是勾选的答案
    【解决方案2】:

    您可以使用以下两种方法:-

    简单来说,波浪号匹配最新的次要版本 (中间数)。 ~1.2.3 将匹配所有 1.2.x 版本,但将 错过 1.3.0。

    另一方面,插入符号更轻松。它会更新你 最新的主要版本(第一个数字)。 ^1.2.3 将匹配 任何 1.x.x 版本,包括 1.3.0,但将推迟到 2.0.0。

    http://fredkschott.com/post/2014/02/npm-no-longer-defaults-to-tildes/

    【讨论】:

    • “插入符号会将您更新到最新的主要版本(第一个数字)。” 与“^1.2.3 将...推迟到 2.0.0。” - 它会推迟到 2.0.0(主要版本)吗?
    • 正如我所说,如果您希望版本为 2.x.x,这是次要版本,您可以这样做 ^2.1.2,它是已知的最新次要版本。它不会下载 3.x.x 或 4.x.x。
    • 我明白了,但那些句子仍然冲突。
    • 你试过了吗?你能分享一下包名吗,这样我就可以试试这个并给你正确的解决方案。
    • 同意@mikemaccana - 你的句子是矛盾的。从另一个答案来看,它实际上比这更复杂。
    【解决方案3】:

    使用npm install package-name@"&lt;next-major.0.0"

    例如:

    npm install package-name@"&lt;3.0.0" 将安装 3.0.0 之前的最新版本(例如 2.11.1)

    【讨论】:

    • 我希望有类似 npm install package-name@latest-non-breaking 的东西(或 yarn 来做这件事),但“3.0.0 之前的最新版本”仍然是迄今为止我得到的最佳答案。谢谢!
    【解决方案4】:

    我遇到了同样的问题,并且来自 Java 和 Maven 环境,我会首先在 https://www.npmjs.com/ 中搜索我的每个特定包。

    然后我会查看软件包的“版本”选项卡并了解有关其版本的更多信息。 我假设主要版本会带来重大更改,而次要版本仅包含代码改进和错误修复,至少这是惯例。但是阅读手册总是有帮助的:)

    有时,版本谓词可以这样组成:“codelyzer@5.2.2 需要 @angular/compiler@>=2.3.1 9.0.0-beta 9.1.0-beta 9.2.0-beta

    【讨论】:

      【解决方案5】:

      ma​​jor.minor.patch = 1.0.3

      major version = 1 , minor version = 0 , patch version = 3

      • Majorminorpatch 代表 package 的不同 releases
      • tilde (~)caret (^) 分别指定要使用的 patchminor 版本。
      • ~1.0.3 - 表示install version 1.0.3 latest patch version1.0.6
      • ^1.0.3 - 表示 install version 1.0.3latest minorpatch version1.4.0
      • 如果 npm package.json 引用尚未达到版本 1.0 的包,则使用 caret(^) 符号将仅获取 patch version

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 2015-11-22
        相关资源
        最近更新 更多