Release
发布一个版本通常需要以下步骤:
- 检查当前工作目录代码是否已全部提交
- 更新
package.json中的版本号 - 生成
CHANGELOG.md文件 - 提交
package.json和CHANGELOG.md文件 - 打标签
- 推送标签到远程仓库
- 发布包
changelogen 可以帮助你自动化生成变更日志,更新版本号,提交代码,打标签,推送标签到远程仓库,发布包等操作。
sh
changelogen --release --patch --push以上命令相当于执行以下 git 命令
sh
# 1. 提交 package.json CHANGELOG.md 文件
git add package.json CHANGELOG.md
# 2. 提交信息
git commit -m "chore(release): v1.0.0"
# 3. 标签版本和信息
git tag -a v1.0.0 -m "v1.0.0"
# 4. 推送标签到远程仓库
git push --follow-tagsCHANGELOG
Changelog(变更日志)文件记录了软件项目的版本历史以及每个版本中所做的更改。这些更改可能包括新功能、修复的错误、安全增强等等。变更日志可以帮助开发者、用户和维护者了解软件项目的演化历程,以及在不同版本之间进行比较和追踪。
在软件项目的开发和维护过程中,变更日志文件也可以作为沟通工具,帮助团队成员之间更好地协作和理解彼此的工作。
生成一个 markdown 格式的变更日志,并在控制台中显示
sh
npx changelogen@latest如果需要生成一个文件,可以使用 --output 选项
sh
npx changelogen --output CHANGELOG.md默认生成的 changelog 已满足大部分需求,但是如果需要自定义,可以在项目根目录下创建一个 changelogen.config.js 文件,然后在文件中添加配置
js
export default {
types: {
feat: { title: '🚀 Enhancements', semver: 'minor' },
perf: { title: '🔥 Performance', semver: 'patch' },
fix: { title: '🩹 Fixes', semver: 'patch' },
refactor: { title: '💅 Refactors', semver: 'patch' },
docs: { title: '📖 Documentation', semver: 'patch' },
build: { title: '📦 Build', semver: 'patch' },
types: { title: '🌊 Types', semver: 'patch' },
chore: { title: '🏡 Chore' },
examples: { title: '🏀 Examples' },
test: { title: '✅ Tests' },
style: { title: '🎨 Styles' },
ci: { title: '🤖 CI' },
}
}版本控制
sh
changelogen --output CHANGELOG.md --release --patch --push默认情况下, changelogen 不会自动推送标签到远程仓库,如果需要自动推送,可以使用 --push 选项,使用 ——no-commit 禁用提交,使用 ——no-tag 禁用标记。
如果需要修改提交信息和标签信息,可以在 changelogen.config.js 文件中添加 templates 配置,以下是默认配置
js
export default {
templates: {
// 提交信息
commitMessage: 'chore(release): v{{newVersion}}',
// 标签版本
tagBody: 'v{{newVersion}}',
// 标签信息
tagMessage: 'v{{newVersion}}',
},
}配置 package.json 文件
json
{
"scripts": {
"bump:patch": "changelogen --output CHANGELOG.md --release --patch --push",
"bump:minor": "changelogen --output CHANGELOG.md --release --minor --push",
"bump:major": "changelogen --output CHANGELOG.md --release --major --push"
}
}发布 npm 包
发布 npm 包脚本
ts
export async function npmPublish(config: ChangelogConfig) {
const pkg = await readPackageJSON(config)
const args = [...config.publish.args]
if (!config.publish.private && !pkg.private) {
args.push('--access', 'public')
}
if (config.publish.tag) {
args.push('--tag', `"${config.publish.tag}"`)
}
if (
isCI
&& provider === 'github_actions'
&& process.env.NPM_CONFIG_PROVENANCE !== 'false'
) {
args.push('--provenance')
}
return execCommand(`npm publish ${args.join(' ')}`)
}配置 changelogen.config.js 文件,以下是默认配置
js
export default {
publish: {
private: false,
tag: 'latest',
args: [],
},
}Reference