如何在npm上安装最新的小版本软件包?

时间:2016-09-16 13:43:22

标签: npm semantic-versioning

例如:

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

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

5 个答案:

答案 0 :(得分:6)

Npm使用semver,因此您可以使用各种方法来接近目标

查看官方documentation,您可以使用以下内容:

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

还有更多种类的范围,因此您可以使用此表格 Advanced Range Syntax正如您所看到的,这是一个样本,最终的semver repo中有趣的摘录是您的答案:

  

高级范围语法desugars到原始比较器   确定性的方式。

     

高级范围可以与基元相同的方式组合   使用空格或||的比较器。 Hyphen Ranges 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-Ranges 1.2.x 1.X 1.2。* *

     

X,x或*中的任何一个都可以用于&#34;站在&#34;其中一个数字   [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
     

Tilde范围~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将允许   不,因为它是一个不同的[主要,次要,补丁]的预发布   元组。

     

Caret Ranges ^ 1.2.3 ^ 0.2.5 ^ 0.0.4

     

允许更改不会修改最左边的非零数字   [主要,次要,补丁]元组。换句话说,这允许补丁和   1.0.0及更高版本的次要更新,版本的修补程序更新   0.X&gt; = 0.1.0,版本0.0.X。

没有更新      

许多作者将0.x版本视为x是主要版本   &#34;破变化&#34;指示器。

     

当作者可能会做出重大改变时,插入符号是理想的选择   介于0.2.4和0.3.0之间,这是一种常见的做法。然而,   它假定在​​0.2.4和0.2之间不会有突破性的变化   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将允许   不,因为它是一个不同的[主要,次要,补丁]的预发布   元组。       ^ 0.0.3-beta:=&gt; = 0.0.3-beta&lt; 0.0.4请注意,只有0.0.3版本中的预发布版本大于或等于beta时才允许。因此,允许0.0.3-pr.2。

     

解析插入符号范围时,丢失的补丁值会消耗掉   数字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"

答案 1 :(得分:6)

使用npm install package-name@"<next-major.0.0"

例如:

npm install package-name@"<3.0.0" 会在3.0.0之前安装最新版本(例如2.11.1)

答案 2 :(得分:1)

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

  

用最简单的术语来说,代字号与最新的次要版本相匹配   (中间数字)。 ~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/

答案 3 :(得分:1)

ma​​jor.minor.patch = 1.0.3

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

  • Majorminorpatch 表示 releases 的不同 package
  • tilde (~)caret (^) 分别指定要使用的 patchminor 版本。
  • ~1.0.3 - 表示 install version 1.0.3 latest patch version,例如 1.0.6
  • ^1.0.3 - 表示 install version 1.0.3latest minorpatch version 这样的如1.4.0
  • 如果 npm package.json 引用尚未达到版本 1.0 的包,使用 caret(^) 符号只会获取 patch {{1 }}。

答案 4 :(得分:0)

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

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

有时候,版本谓词可以这样构成:“ codelyzer@5.2.2需要一个对等体@ angular / compiler @> = 2.3.1 <10.0.0 ||> 9.0.0-beta <10.0.0 ||> 9.1.0-beta <10.0.0 ||> 9.2.0-beta <10.0.0,但未安装。您必须自己安装对等依赖项。“