npm版本规范和changelog

本文介绍了npm的语义化版本(Semantic Versioning)规范,包括版本格式、版本大小比较和版本范围。同时,探讨了Changelog的重要性,并推荐使用release-it工具进行自动化版本控制和Changelog管理,该工具能够自动生成版本号、Changelog并提供丰富的定制选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Semantic Versioning

在早期,开发者安装某个软件包时,发现这个软件包里又依赖不同特定版本的其它软件包。随着系统功能越来越复杂,依赖的软件包越来越多,依赖关系也越来越深,这个时候可能面临版本控制被锁死的风险。这就是「依赖地狱」的问题。

因此,Github 起草了一个具有指导意义的,统一的版本号表示规则,称为 Semantic Versioning(语义化版本),即 Semver。目前它是由 npm 的团队维护。

Semver 的出现,规定了版本号如何表示,如何增加,如何进行比较,不同的版本号意味着什么。遵从了 Semver 规范的包依赖会非常清晰,不会出现循环依赖、依赖冲突等常见问题。

版本格式

majol
主版本,一般代表着很大的变更,例如vue 1.x和vue 2.x、 webpack 3.x和webpack 4.x

minor
次版本,一般代表着新feature的出现

patch
般不包含新功能,只是bugfix或和功能关系不大的修改

pre-release

预发行版本,一般用于正式版发行前的验证、联调和测试。和正式版本号之间用-连接

预发版本类型:

  • alpha: 内部版本。此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的 Bug 可能还较多,需要继续修改。
  • beta: 公测版本。该版本相对于 alpha 版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的 UI,这个阶段的版本也会一直加入新的功能。
  • rc: 即 Release candiate,正式版本的候选版本。该版本已经相当成熟了,基本上不存在导致错误的 BUG,与即将发行的正式版相差无几,不会再加入新的功能了,主要着重于除错。

pre-release后面跟着的数字

发布次数

版本大小比较

2.3.2 > 2.2.17 > 2.2.17-beta.1 > 2.2.17-beta.0 > 2.2.17-alpha.1 > 2.2.16

 版本范围

// 大于、小于、大于等于、小于等于
>、<、 v=、<=
//- 表示范围,边界可等
- :1.2.3 - 2.3.4 := >=1.2 .3 <=2.3 .4I.
// x 表示通配,和各种语言的通配符一样
x :1.2.x := >=1.2.0 <1.3.0
// ~ 表示限制minor版本的升级
~ :~1.2.3 := >=1.2.3 <1.(2+1).0 := >=1.2.3 <1.3.0
// ^ 表示允许第二个非零的版本的升级
^ :^1.2.3 := >=1.2.3 <2.0.0
^ :^0.2.3 := >=0.2.3 <0.3.0:
^ :^0.0.3 := >=0.0.3 <0.0.4

Changelog

Changelog是以时间为倒序的列表,记录所有版本的变动及变动说明。让使用我们提供库的用户看到changelog时能对库的变动一目了然

推荐使用release-it实现自动化的npm包版本控制和Changelog

release-it的能力:

  • 根据git commit自动生成版本号
  • 自动生成changelog
  • 丰富的hooks用来定制发版逻辑
  • 提供插件机制,高度可扩展

release-it的配置和使用

/**
*自动生成Changelog
*根据gitcommitmsg选择版本
*可以手动发布pre-release版本
*npm发版后自动打git tag
*/

{
    "hooks":{
        "after:bump":"auto-changelog -p"
    },
    "git":{
        "changelog": "auto-changelog --stdout --commit-limit false",
        "requireCleanWorkingDir": false,
        "requireUpstream": true,
        "requireCommits": false,
        "addUntrackedFiles": false,
        "commit": true,
        "commitMessage": "version: release ${version}",
        "commitArgs":"",
        "tag": true ,
        "tagName":"{version}",
        "tagAnnotation":"Release sfversion}",
        "tagArgs":"",
        "push": true,
        "pushArgs":"--folow-tags",
        "pushRepo":"origin",
    },
    "npm":{
        "publish": true,
        "publishPath":"",
        "access": null,
        "otp": null
    },
    "plugins":{
        "@release-it/conventional-changelog":{
            "preset": "angular",
            "infile":"CHANGELOG.md"
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值