简介
@semantic-release/changelog 是一款 npm 包,它是 semantic-release 发布流程中的一个 step(步骤),用来自动生成 changelog(变更日志)。通过它,你可以在每次版本发布时自动化生成日志,简化发布流程,让团队成员更方便快捷地查看每次版本的变更情况。
安装
在使用 @semantic-release/changelog 之前,你需要先安装 semantic-release。若未安装,请执行以下命令进行安装:
npm install semantic-release -D
安装完成后,执行以下命令安装 @semantic-release/changelog:
npm install @semantic-release/changelog -D
配置
- 添加 @semantic-release/changelog 到 .releaserc.json 中
-- -------------------- ---- ------- - ---------- - ------------------------------------ -------------------------------------------- ------------------------ --------------------------- ----------------------------- - -
你可以根据需求自定义配置不同的插件,这里只列出了比较常用的插件。
- 添加生成日志的配置
@semantic-release/changelog 提供了多种生成 changelog 的方式,比如:通过 git commit 信息生成、通过 GitHub Release 生成等。我们以通过 git commit 信息生成为例:
修改 package.json
在 package.json 中添加 "version" 和 "scripts":
{ "version": "1.0.0", "scripts": { "release": "semantic-release" } }
配置环境变量
在项目根目录创建 .env 文件并添加以下配置:
GH_TOKEN=<github_personal_access_token> NPM_TOKEN=<npm_token>
这里使用了两个 token:
- GH_TOKEN:用于发布至 GitHub,需获取 Repo 权限。
- NPM_TOKEN:用于发布至 npm。
更改 commit 信息规则
我们需要在 commit 信息中添加相应的信息,才能让 @semantic-release/changelog 生成 changelog。在执行 git commit 命令前,我们需要添加 commit 信息的规则:
npm install -D commitizen cz-conventional-changelog
在 package.json 的 scripts 中添加:
{ "scripts": { "commit": "cz" } }
这样,每次执行 npm run commit
就会出现 commit 信息填写的交互式界面,填写完后自动生成符合规范的 commit 信息。
示例代码
以上配置完后,每次发布版本只需要执行 npm run release
即可。
npm run release
@semantic-release/changelog 会自动生成 changelog 并发布至 GitHub Release。
示例 changelog:
-- -------------------- ---- ------- -- -------------------------------------------------------- ------------ --- --- ----- - --------- ------- ---------- --- -- ------ -------------------------------------------------------- --- -------- - -------- --- -------- --- --------------------------------------------------------
总结
通过 @semantic-release/changelog 可以自动化生成 changelog,为项目的发布流程带来便利。但需要注意的是,每次版本发布前都需要遵循 commit message 规范,并且保证每次变更都有相应的 commit message。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/111462