用来语义化版本判断、操作的库 | 官网
安装
npm install semver
使用
版本号需要符合语义化版本的规范 x.y.z-patch
取值与操作
valid(version: string): string | null
验证版本号是否符合规范,如果不合规返回null
const semver = require('semver')
console.log(semver.valid('1.2.3')) // -> 1.2.3
console.log(semver.valid('1.2.3-beta.1')) // -> 1.2.3-beta.1
console.log(semver.valid('1.2')) // -> null
inc(version: string, release: string): string
返回根据release类型增加的版本号release: 版本类型major:主版本premajor:主版本预览版minor:次版本preminor: 次版本预览版patch: 补丁版prepatch:补丁版预览版prerelease:先行版(非先行版调用等同于prepatch)
let version = '1.0.0-alpha.1'
console.log(semver.inc(version, 'major')) // 1.0.0
console.log(semver.inc(version, 'premajor')) // 2.0.0-0
console.log(semver.inc(version, 'minor')) // 1.0.0
console.log(semver.inc(version, 'preminor')) // 1.1.0-0
console.log(semver.inc(version, 'patch')) // 1.0.0
console.log(semver.inc(version, 'prepatch')) // 1.0.1-0
console.log(semver.inc(version, 'prerelease')) // 1.0.0-alpha.2
version = '1.0.0'
// 再次调用就不写了, 直接写对应结果
// major -> 2.0.0
// premajor -> 2.0.0-0
// minor -> 1.1.0
// preminor -> 1.1.0-0
// patch -> 1.0.1
// prepatch -> 1.0.1-0
// prerelease -> 1.0.1-0
prelease(version: string): 返回先行版版本数组major(version: string):返回版本主版本号minor(version: string):返回版本次版本号patch(version: string):返回版本修订号
const version = '1.0.0-rc.1'
console.log(semver.major(version)) // 1
console.log(semver.minor(version)) // 0
console.log(semver.patch(version)) // 0
console.log(semver.prerelease(version)) // [ 'rc', 1 ]
intersects(range1: string, range2: string, loose: boolean): boolean
判断两个版本区间是否相交
console.log(semver.intersects('~1.2.3', '^1.2.8'))
// true | [1.2.3, 1.3.0) 与 [1.2.8, 2.0.0) 区间有交集
console.log(semver.intersects('>1.0.0', '^1.0.0'))
// true | [1.0.0, infinity) 与 [1.0.0, 1.2.0) 有交集
console.log(semver.intersects('<=1.1.0', '~1.0.0'))
// true | [0.0.0, 1.1.0] 与 [1.0.0, 2.0.0) 有交集
parse(version: string): object
将版本号转换为SemVer对象
const version = '1.0.0-alpha.1'
semver.parse(version)
/*
{
"options": {},
"loose": false,
"includePrerelease": false,
"raw": "1.0.0-alpha.1",
"major": 1,
"minor": 0,
"patch": 0,
"prerelease": [
"alpha",
1
],
"build": [],
"version": "1.0.0-alpha.1"
}
*/
版本比较
gt(v1, v2):v1 > v2gte(v1, v2):v1 >= v2lt(v1, v2):v1 < v2lte(v1, v2):v1 <= v2eq(v1, v2):v1 == v2This is true if they’re logically equivalent, even if they’re not the exact same string. You already know how to compare strings.neq(v1, v2):v1 != v2The opposite ofeq.cmp(v1, comparator, v2): Pass in a comparison string, and it’ll call the corresponding function above."==="and"!=="do simple string comparison, but are included for completeness. Throws if an invalid comparison string is provided.compare(v1, v2): Return0ifv1 == v2, or1ifv1is greater, or-1ifv2is greater. Sorts in ascending order if passed toArray.sort().rcompare(v1, v2): The reverse of compare. Sorts an array of versions in descending order when passed toArray.sort().compareBuild(v1, v2): The same ascomparebut considersbuildwhen two versions are equal. Sorts in ascending order if passed toArray.sort().v2is greater. Sorts in ascending order if passed toArray.sort().diff(v1, v2): Returns difference between two versions by the release type (major,premajor,minor,preminor,patch,prepatch, orprerelease), or null if the versions are the same.
版本区间
validRange(range)satisfies(version, range):maxSatisfying(versions, range):minSatisfying(versions, range): Return the lowest version in the list that satisfies the range, ornullif none of them do.minVersion(range): Return the lowest version that can possibly match the given range.gtr(version, range): Returntrueif version is greater than all the versions possible in the range.ltr(version, range): Returntrueif version is less than all the versions possible in the range.outside(version, range, hilo): Return true if the version is outside the bounds of the range in either the high or low direction. Thehiloargument must be either the string'>'or'<'. (This is the function called bygtrandltr.)intersects(range): Return true if any of the ranges comparators intersectsimplifyRange(versions, range): Return a “simplified” range that matches the same items inversionslist as the range specified. Note that it does not guarantee that it would match the same versions in all cases, only for the set of versions provided. This is useful when generating ranges by joining together multiple versions with||programmatically, to provide the user with something a bit more ergonomic. If the provided range is shorter in string-length than the generated range, then that is returned.subset(subRange, superRange): Returntrueif thesubRangerange is entirely contained by thesuperRangerange.
工具
clean(string): Clean a string to be a valid semver if possiblecoerce(version, opts): Coerces a string to semver if possible