npm package.json ~version and ^version

来源:互联网 发布:js钩子函数作用 编辑:程序博客网 时间:2024/05/22 00:51

  • npm dependency version
  • Semver
  • node-semver
  • 辨识版本
  • npm install nameversion

作为新手, 经常被 package.json 中的 versioin 版本号搞晕

https://docs.npmjs.com/files/package.json#version

npm dependency version

See semver(7) for more details about specifying version ranges.version Must match version exactly>version Must be greater than version>=version etc<version<=version~version "Approximately equivalent to version" See semver(7)^version "Compatible with version" See semver(7)1.2.x 1.2.0, 1.2.1, etc., but not 1.3.0http://... See 'URLs as Dependencies' below* Matches any version"" (just an empty string) Same as *version1 - version2 Same as >=version1 <=version2.range1 || range2 Passes if either range1 or range2 are satisfied.git... See 'Git URLs as Dependencies' belowuser/repo See 'GitHub URLs' belowtag A specific version tagged and published as tag See npm-tag(1)path/path/path See Local Paths below

到官方文档看了之后才发现一个新东东,语义化版本(semantic version | semver)

Semver

http://semver.org/lang/zh-CN/

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
主版本号:当你做了不兼容的API 修改,
次版本号:当你做了向下兼容的功能性新增,
修订号:当你做了向下兼容的问题修正。
先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

node-semver

npm 官方有专门的工具,来解析这个 semver
https://github.com/npm/node-semver

ganiks@nodejs -> npm install semverganiks@nodejs -> node> semver.valid('1.2.3') // '1.2.3'> semver.valid('a.b.c') // null> semver.clean('  =v1.2.3   ') // '1.2.3'> semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true> semver.gt('1.2.3', '9.8.7') // false> semver.lt('1.2.3', '9.8.7') // true

辨识版本

Tilde Ranges ~1.2.3 ~1.2 ~1Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not.~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 to beta.2. So, 1.2.3-beta.4 would be allowed, but 1.2.4-beta.2 would not, because it is a prerelease of a different [major, minor, patch] tuple.Caret Ranges ^1.2.3 ^0.2.5 ^0.0.4Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple. In other words, this allows patch and minor updates for versions 1.0.0 and above, patch updates for versions 0.X >=0.1.0, and no updates for versions 0.0.X.Many authors treat a 0.x version as if the x were the major "breaking-change" indicator.Caret ranges are ideal when an author may make breaking changes between 0.2.4 and 0.3.0 releases, which is a common practice. However, it presumes that there will not be breaking changes between 0.2.4 and 0.2.5. It allows for changes that are presumed to be additive (but non-breaking), according to commonly observed practices.^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 to beta.2. So, 1.2.3-beta.4 would be allowed, but 1.2.4-beta.2 would not, because it is a prerelease of a different [major, minor, patch] tuple.^0.0.3-beta := >=0.0.3-beta <0.0.4 Note that prereleases in the 0.0.3 version only will be allowed, if they are greater than or equal to beta. So, 0.0.3-pr.2 would be allowed.When parsing caret ranges, a missing patch value desugars to the number 0, but will allow flexibility within that value, even if the major and minor versions are both 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.0A missing minor and patch values will desugar to zero, but also allow flexibility within those values, even if the major version is zero.^1.x := >=1.0.0 <2.0.0^0.x := >=0.0.0 <1.0.0

npm install <name>@<version>

指定安装的package 版本

npm install (with no args in a package dir)npm install <tarball file>npm install <tarball url>npm install <folder>npm install [@<scope>/]<name> [--save|--save-dev|--save-optional] [--save-exact]npm install [@<scope>/]<name>@<tag>npm install [@<scope>/]<name>@<version>npm install [@<scope>/]<name>@<version range>npm i (with any of the previous argument usage)
0 0
原创粉丝点击