【发布时间】:2017-01-24 18:34:21
【问题描述】:
例如:
- 我安装了
2.0.0或package-name版本。 - 具有相同主要版本的最新次要版本是
2.1.2 - 最新的主要版本(如果我运行
npm install package-name@latest会安装4.3.0
如何安装没有重大更改的最新软件包?
【问题讨论】:
例如:
2.0.0 或 package-name 版本。2.1.2
npm install package-name@latest 会安装4.3.0
如何安装没有重大更改的最新软件包?
【问题讨论】:
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.0X 范围 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"
【讨论】:
您可以使用以下两种方法:-
简单来说,波浪号匹配最新的次要版本 (中间数)。 ~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/
【讨论】:
使用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 的东西(或 yarn 来做这件事),但“3.0.0 之前的最新版本”仍然是迄今为止我得到的最佳答案。谢谢!
我遇到了同样的问题,并且来自 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
【讨论】:
major.minor.patch = 1.0.3
major version = 1 ,
minor version = 0 ,
patch version = 3
Major、minor 和 patch 代表 package 的不同 releases。tilde (~) 和 caret (^) 分别指定要使用的 patch 和 minor 版本。~1.0.3 - 表示install version 1.0.3 或latest patch version 如1.0.6。^1.0.3 - 表示 install version 1.0.3 或 latest minor 或 patch version 如 1.4.0。npm package.json 引用尚未达到版本 1.0 的包,则使用 caret(^) 符号将仅获取 patch version。【讨论】: