语义化版本SemVer管理npm依赖包的工具
应用场景:实现一个插件化的系统,并定期检测更新,对不当的更新做出警告。
学习这个API的理由,在随着web框架 迭代的过程中 先后衍生出了 vue-cli 、create-react-app cli等等一系列自动化的脚手架,视乎不再了解 webpack-cli 脚手架 的项目搭建实现过程及优化。
官方文档(规则):语义化版本 2.0.0 | Semantic Versioning
常见版本英文缩写
Snapshot:快照
也被称为开发版,处于开发阶段。这个版本的代码禁止用于生产环境。
Alpha (α):内测版
内部交流或专业测试人员测试使用。
Preview:预览版
与 Alpha 类似,有时还会细分 M1,M2 版本。
Beta (β):公测版
专业爱好者大规模测试使用,存在一些 Bug,不适合一般用户使用。
Gamma (λ)
比较成熟的测试版。
RC (Release Candidate):候选版本
处于 Gamma 阶段,该版本已经完成了全部功能并清除了大量的 Bug。
一般来说,Alpha -> Beta -> Gamma 是迭代的关系,RC1 -> RC2 是取舍的关系。
Release:发行版本
正式发行的版本,已经经过测试,一般不会出现严重的 Bug,适合一般用户使用。
对于不开源的软件, Release 可能是带有免费使用时间限制的版本。
Stable:稳定版
同 Release 版本。
npm i 下载包的规则 以及 package.json 中的 dependencies 与 devDependencies 字段中关于包的定义
关于 公用API 的 ^ 符号说明
"vue": "^3.2.41" 中的 ^ 符号 是指 下一次 npm i 可以下载 同一主版本号并不小于指定版本号的版本号
意思就是:npm下次可以下载 主版本号为3的包 次版号和修订号 只能是大于或小于这个版本号
案例: 这次安装的是 "vue": "^3.2.41" 下次可以安装 "vue": "^3.2.41" 或 "vue": "^3.3.41" 也可以是 "vue": "^3.2.43" 但不能是 "vue": "^4.2.41" 也不能是 "vue": "^3.1.41"
关于 公用API 的 ~ 符号说明
"vue": "~3.2.41" 中的 ~符号 是指下一次 npm i 可以下载 同一主版本和次版本号并不小于指定版本号的版本号
这个就不详细说了,可以照着上面的案例 规则去思考
用来指定一个版本号范围 > 、<、 = 、>= 、<=、-
'>2.1'
# 下次 npm i 下载的包只能是 1.0.0 到 1.2.0 之间的包或等于它们的包
'1.0.0 - 1.2.0'
npm i vue@"2.7.1 - 2.7.13"
# 注意使用 '-' 的时候,必须两边都有空格。
|| : 表示或者
'^2 <2.2 ||> 2.3'
x、X、* :表示通配符
# 对应所有的版本
'*'
# 对应所有主版本号为 3 的版本号
'3.x'
npm i vue@3.x
Semver API的使用
是一个专门分析Semantic Version(语义化版本)的工具
下载
# node 内置了,所以不用下载
npm install semver
比较两个版本号的大小
// 导入 semver 模块
const semver = require('semver')
// 从左到右的比较 就是左边的版本是否比右边大 left > right
semver.gt('1.2.3', '2.3.4') // false
// 从右到左的比较 就是右边的版本是否比左边大 right > left
semver.lt('1.2.3', '2.3.4') // true
验证版本号是否合法,返回 null 即不合法
// 导入 semver 模块
const semver = require('semver')
semver.valid('1.2.3') // '1.2.3' 合法
semver.valid('a.b.c') // null 不合法
提取版本号
// 导入 semver 模块
const semver = require('semver')
// 提取全部的版本号 主版本号.次版本号.修订号
semver.clean(' =v1.2.3') // '1.2.3'
// 提取 主版本号
semver.major( '1.2.3' ) // '1'
// 提取次版本号
semver.minor( '1.2.3' ) // '2'
// 提取修订号
semver.patch( '1.2.3' ) // '3'
定义版本号
// 导入 semver 模块
const semver = require('semver')
semver.coerce('v2')
console.log( semver.coerce('v2') )
// 输出结果
// SemVer {
options: { loose: false, includePrerelease: false },
loose: false,
raw: '2.0.0',
major: 2,
minor: 0,
patch: 0,
prerelease: [],
build: [],
version: '2.0.0'
}