semantic-release的使用
1.安装
npm install semantic-release
根据需要还需要单独安装
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/git",
"@semantic-release/github"
下面这两个,semantic-release 会间接依赖,然后安装
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
2.配置文件 .releaserc.json
类似下面的结构(根据实际情况调整)
"release": {
"branches": ["main", "next"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/git",
"@semantic-release/github"
]
}
目前我项目配置:
{
"branches": ["master"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
[
"@semantic-release/changelog",
{
"changelogFile": "docs/CHANGELOG.md"
}
],
[
"@semantic-release/gitlab",
{
"gitlabUrl": "https://gitlab.duoxiaozhan.com:8081",
"gitlabApiPathPrefix": "/api/v4/",
"verifyConditions": [],
"failComment": false,
"failTitle": false,
"assets": [
{ "path": "dist/*", "label": "Built assets" },
{ "path": "docs/CHANGELOG.md", "label": "Changelog" },
{ "path": "package.json", "label": "package.json" }
]
}
],
"@semantic-release/npm",
[
"@semantic-release/git",
{
"assets": ["package.json", "docs/CHANGELOG.md", "dist/*"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
重点说下
@semantic-release/npm 会在发布 npm 包时 自动调用 npm 命令(如 npm publish 或 npm pack)来上传包。
它会在当前环境(CI 或本地)寻找 .npmrc 文件,使用其中的配置和认证信息
对于 .npmrc: 可以配置私有仓库的地址以及token信息
3.执行
"scripts": {
"semantic-release": "semantic-release"
}
npm run semantic-release
在git提交的使用分析
这条 Git 提交记录:
chore(release): 3.10.0 [skip ci]
遵循了 Conventional Commits 规范,并具有以下含义:
✅ 各部分含义解析:
1. chore
这是 提交类型(type),表示“杂项/构建任务”,不影响代码逻辑,例如构建、依赖升级、脚本更新等。
常见类型包括:
feat:新增功能fix:修复 bugdocs:文档更新style:代码格式修改(不影响功能)refactor:重构test:测试代码变更chore:其他不属于以上类型的杂项
2. (release)
这是 可选的作用域(scope),指此次提交影响的是“发布流程”相关的内容。
3. 3.10.0
这是 提交说明(description),说明这是一次版本发布,发布的是 v3.10.0。
通常,这类提交是由自动化工具(如 semantic-release 或 standard-version)在发布版本时生成的。
4. [skip ci]
这是一个特殊的标记,用于告诉 CI 工具(如 GitLab CI、GitHub Actions、CircleCI 等)跳过此次提交的 CI/CD 流程,因为这个提交只是用于发布,不需要运行构建或测试。
🚀 总结这条提交做了什么:
这条提交说明:
- 类型是
chore,代表杂项; - 作用是
release,说明它是版本发布相关的更改; - 发布的版本是
3.10.0; [skip ci]表示这次提交不需要运行 CI;- 极可能是自动工具生成的,不是手动写的。
✅ 这类提交的常见用途:
- 自动发布版本并打 Tag;
- 自动更新
CHANGELOG.md; - 和语义版本工具搭配使用(如
semantic-release,standard-version); - 保持 changelog、tag 和 package.json 版本号一致。
如果使用了 semantic-release 或类似工具来做自动版本管理,那么这种提交会自动出现在每次发布流程中。
