版本管理
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
- 主版本号:当你做了不兼容的 API 修改,
- 次版本号:当你做了向下兼容的功能性新增,
- 修订号:当你做了向下兼容的问题修正。
先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
alpha表示内部测试版,主要给开发和测试找 bug 用,不建议用户下载beta表示公开测试版,你可以提前尝试一些功能rc是 Release Candidate(候选版本)的缩写,表示该版本功能不再增加,和最终发布版功能一样,有点像预览版,然后可能再改改一些小 bug,就会到正式的版本了。
npm 指定版本范围
我们经常在 package.json 文件中看到版本号前出现 ~ ^ 等字符,比如:
json
{
"dependencies": {
"vue": "~1.2.3",
"react": "^1.2.3"
}
}^ 表示次版本号的更新,只会执行不更改最左边非零数字的更新,比如 ^1.2.3 就表示以后安装的版本 >=1.2.3 <2.0.0
~ 表示修订版本号的更新,比如 ~1.2.3 就表示以后安装的版本 >=1.2.3 <1.3.0
semver
版本号效验
ts
// 是否为有效的版本号
function isValid(version: string) {
return Boolean(semver.valid(version))
}
// 是否为现行版本
function isPreRelease(version: string) {
return Boolean(semver.prerelease(version))
}获取可选择的版本号
ts
import type { ReleaseType } from 'semver'
import semver from 'semver'
/**
* 获取可选择的版本号
* @param latestVersion 当前版本号
*/
function getIncrementChoices(latestVersion: string) {
const types = ['patch', 'minor', 'major'] as ReleaseType[]
const choices = types.map((increment) => {
// semver.inc('1.2.3', 'prerelease', 'beta')
const nextVersion = semver.inc(latestVersion, increment)
return { name: `${increment} (${nextVersion})`, value: increment }
})
return choices
}自定义版本号
ts
async function promptVersion(latestVersion: string) {
const { version } = await inquirer.prompt({
name: 'version',
type: 'input',
message: () => `Please enter a valid version:`,
transformer: (input: string) =>
semver.valid(input)
? semver.gt(input, latestVersion)
? green(input)
: red(input)
: redBright(input),
validate: input =>
!!semver.valid(input) || 'The version must follow the semver standard.',
})
return version
}