如何使用npm semver模块验证x范围/通配符格式的semver版本规范
你现有代码的问题出在两个核心逻辑错误:
semver.satisfies参数顺序颠倒,它的入参规则是第一个参数为具体的确定版本号,第二个参数为版本范围规则semver.gt仅支持两个确定的版本号比较大小,不能传入带x/*的范围字符串
正确实现逻辑
1. 验证通配符范围格式是否合法
如果你的需求是校验用户输入的1.x.x/1.*.*这类范围格式是否符合semver规范,直接用semver.validRange方法即可,合法返回标准化后的范围字符串,不合法返回null:
const semver = require('semver') // 验证范围格式合法性 console.log(semver.validRange('1.x.x')) // 输出 >=1.0.0 <2.0.0 console.log(semver.validRange('1.*.*')) // 输出 >=1.0.0 <2.0.0 console.log(semver.validRange('invalid.1.x')) // 输出 null
2. 判断具体版本是否符合通配符范围
如果需要校验某个确定的版本号是否匹配用户输入的通配符范围,使用semver.satisfies,注意参数顺序:
// 校验1.2.3是否符合1.x.x范围 console.log(semver.satisfies('1.2.3', '1.x.x')) // 输出 true // 校验2.0.0是否符合1.x.x范围 console.log(semver.satisfies('2.0.0', '1.x.x')) // 输出 false
3. 比较范围与确定版本的大小
如果需要判断某通配符范围的最低兼容版本是否大于某个确定版本,先通过semver.minVersion获取范围对应的最小版本,再做比较:
// 获取1.x.x的最小版本 const minVerOfRange = semver.minVersion('1.x.x') // 得到1.0.0 console.log(semver.gt(minVerOfRange, '0.0.0')) // 输出 true
内容的提问来源于stack exchange,提问作者sharingiscaring
相关产品推荐
相关产品推荐

