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

mik*_*ana 13 npm semantic-versioning

例如:

  • 我有版本2.0.0package-name安装.
  • 具有相同主要版本的最新次要版本是 2.1.2
  • 最新的主要版本(如果我运行将安装npm install package-name@latest4.3.0

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

Kev*_*ski 13

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

例如:

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

  • 我希望有一些类似`npm install package-name @ latest-non-breaking`(或者说要做到这一点的纱线),但是"3.0.0之前的最新版本"仍然是我迄今为止最好的答案.谢谢! (2认同)

anq*_*egi 8

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

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

npm install package-name@">=2.1.2 <2.2.0"
Run Code Online (Sandbox Code Playgroud)

还有更多种类的范围,所以你可以使用这种形式的 高级范围语法,你可以看到,这是一个样本,最终的semver repo有趣的摘录是你的答案:

高级范围语法以确定的方式去处理原始比较器.

高级范围可以与使用空格或||的原始比较器相同的方式组合.连字符范围XYZ - ABC

指定包含集.

1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
Run Code Online (Sandbox Code Playgroud)

如果提供部分版本作为包含范围中的第一个版本,则缺少的部分将替换为零.

1.2 - 2.3.4 := >=1.2.0 <=2.3.4
Run Code Online (Sandbox Code Playgroud)

如果在包含范围内提供了部分版本作为第二个版本,则接受以元组提供的部分开头的所有版本,但不会超过提供的元组部分.

1.2.3 - 2.3 := >=1.2.3 <2.4.0
1.2.3 - 2 := >=1.2.3 <3.0.0
Run Code Online (Sandbox Code Playgroud)

X-Ranges 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)
Run Code Online (Sandbox Code Playgroud)

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

"" (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
Run Code Online (Sandbox Code Playgroud)

Tilde Ranges~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
Run Code Online (Sandbox Code Playgroud)

到beta.2.因此,1.2.3-beta.4将被允许,但1.2.4-beta.2不会,因为它是不同的[主要,次要,补丁]元组的预发布.

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

允许更改不会修改[major,minor,patch]元组中最左边的非零数字.换句话说,这允许版本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.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
Run Code Online (Sandbox Code Playgroud)

到beta.2.因此,1.2.3-beta.4将被允许,但1.2.4-beta.2不会,因为它是不同的[主要,次要,补丁]元组的预发布.^ 0.0.3-beta:=> = 0.0.3-beta <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
Run Code Online (Sandbox Code Playgroud)

如果主要版本为零,则缺少次要值和补丁值将减少为零,但也允许这些值内的灵活性.

^1.x := >=1.0.0 <2.0.0
^0.x := >=0.0.0 <1.0.0
Run Code Online (Sandbox Code Playgroud)

总结你的例子可能是

npm install package-name@"^2.1.x"
Run Code Online (Sandbox Code Playgroud)

  • 这应该是勾选的答案 (2认同)

Rit*_*pta 7

主要.次要.补丁=1.0.3

\n

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

\n
    \n
  • Majorminor并代表a 的patch不同。releasespackage
  • \n
  • tilde (~)并分别caret (^)指定要使用的patch版本minor
  • \n
  • ~1.0.3- 表示“到”install version 1.0.3 或“latest patch version例如” 1.0.6
  • \n
  • ^1.0.3- 表示“到”install version 1.0.3或“该latest minor”或“patch version例如” 1.4.0
  • \n
  • 如果 npm package.json引用尚未\xe2\x80\x99t 版本的包1.0,使用该caret(^)符号只会获取patch version.
  • \n
\n


小智 6

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

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

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

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

  • “插入符号会将您更新到最新的主要版本(第一个数字)。”与“^1.2.3 将......推迟到 2.0.0”的冲突。- 会不会推迟到 2.0.0,主要版本? (3认同)
  • 我明白,但那些句子仍然冲突。 (3认同)
  • 同意@mikemaccana - 你的句子是矛盾的。从另一个答案来看,它实际上比这更复杂。 (3认同)