最近Github 10周年在朋友圈里沸沸扬扬刷屏,小编在工做中却惊讶的发现很多同事对版本号中的beta和rc没有概念,使用npm install package@next时,也不清楚next表明的含义。因而,决定写一篇文章科普一下由 Github 起草的Semver(语义化版本)的相关知识。前端
首先,咱们来看看目前最流行的前端框架之一的React最近5个月的版本发布日志,截图来自npmjs.com:react
从上图,咱们不可贵出几个结论:git
能够说,React 发布版本时作的至关到位,版本给人的感受很是清晰,也很严谨。这得益于 Semver(语义化版本) 规范的功劳。那么,Semver是在什么场景下出现的呢?它的出现又解决了什么问题?这里要和你们科普下“依赖地狱”的概念。github
通俗而言,“依赖地狱”指开发者安装某个软件包时,发现这个软件包里又依赖不一样特定版本的其它软件包。随着系统功能愈来愈复杂,依赖的软件包愈来愈多,依赖关系也愈来愈深,这个时候可能面临版本控制被锁死的风险。npm
所以,Github 起草了一个具备指导意义的,统一的版本号表示规则,称为 Semantic Versioning(语义化版本表示)。该规则规定了版本号如何表示,如何增长,如何进行比较,不一样的版本号意味着什么。json
官网:semver.org/ 中文版:semver.org/lang/zh-CN/bash
下面是听从了Semver规范的React依赖图,截图来自npm.broofa.com: 前端框架
能够看出,听从了Semver规范的包依赖很是清晰,没有出现循环依赖、依赖冲突等常见问题。框架
版本格式:主版本号.次版本号.修订号,版本号递增规则以下:spa
先行版本号及版本编译信息能够加到“主版本号.次版本号.修订号”的后面,做为延伸。
当要发布大版本或者核心的Feature时,可是又不能保证这个版本的功能 100% 正常。这个时候就须要经过发布先行版本。比较常见的先行版本包括:内测版、灰度版本了和RC版本。Semver规范中使用alpha、beta、rc(之前叫作gama)来修饰即将要发布的版本。它们的含义是:
好比:1.0.0-alpha.0, 1.0.0-alpha.1, 1.0.0-beta.0, 1.0.0-rc.0, 1.0.p-rc.1 等版本。alpha, beta, rc后须要带上次数信息。
列举出比较实用的一些规则:
当执行npm install package -S 来安装三方包时,npm 会首先安装包的最新版本,而后将包名及版本号写入到 package.json 文件中。
好比,经过npm 安装 react 时:
{
"dependencies": {
"react": "~16.2.0"
}
}
复制代码
项目对包的依赖可使用下面的 3 种方法来表示(假设当前版本号是 16.2.0):
一般咱们发布一个包到npm仓库时,咱们的作法是先修改 package.json 为某个版本,而后执行 npm publish 命令。手动修改版本号的作法创建在你对Semver规范特别熟悉的基础之上,不然可能会形成版本混乱。npm 考虑到了这点,它提供了相关的命令来让咱们更好的听从Semver规范:
当执行 npm publish 时,会首先将当前版本发布到 npm registry,而后更新 dist-tags.latest 的值为新版本。
当执行 npm publish --tag=next 时,会首先将当前版本发布到 npm registry,而且更新 dist-tags.next 的值为新版本。这里的 next 能够是任意有意义的命名(好比:v1.x、v2.x 等等)
OK,如今你应该知道 npm install package@next时next表明的含义了吧!
《IVWEB 技术周刊》 震撼上线了,关注公众号:IVWEB社区,每周定时推送优质文章。