版本和日志管理
Release-it 是一个现代化的发布管理工具,可以自动化版本管理和发布流程。本指南将详细介绍如何使用 Release-it 管理 VUP 项目的版本和发布。
什么是 Release-it
Release-it 是一个发布管理工具,提供:
- 语义化版本控制 - 基于提交信息自动管理版本号
- 变更日志生成 - 从提交自动生成详细的变更日志
- Git 工作流 - 自动创建 Git 标签和版本提交
- NPM 集成 - 可选的 NPM 包发布功能
- 可扩展性 - 支持 GitHub 发布、Slack 通知等插件
快速开始
VUP 项目已经预配置了 Release-it,开箱即用:
1. 查看现有配置
bash
# 查看 package.json 中的配置
cat package.json | grep -A 20 '"release-it"'2. 创建发布
bash
# 创建新发布
pnpm release
# 或使用 npm
npm run release3. 发布流程
Release-it 将:
- 更新
package.json中的版本号 - 更新
CHANGELOG.md - 创建 Git 标签
- 提交变更
- 可选发布到 NPM
版本类型
Patch (补丁版本)
Bug 修复和小幅改进:
bash
# 提交信息: fix: resolve login issue
# 版本变化: 1.0.0 → 1.0.1示例提交:
bash
git commit -m "fix: 修复用户登录失败的问题"Minor (次要版本)
新功能和向后兼容的改进:
bash
# 提交信息: feat: add user avatar upload
# 版本变化: 1.0.0 → 1.1.0示例提交:
bash
git commit -m "feat: 添加用户头像上传功能"Major (主要版本)
破坏性变更:
bash
# 提交信息: feat!: refactor API interface
# 版本变化: 1.0.0 → 2.0.0示例提交:
bash
git commit -m "feat!: 重构 API 接口,移除旧版本支持"项目配置
package.json
json
{
"scripts": {
"release": "release-it"
},
"devDependencies": {
"release-it": "^19.0.5",
"@release-it/conventional-changelog": "^10.0.1"
},
"release-it": {
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular",
"infile": "CHANGELOG.md"
}
},
"git": {
"commitMessage": "chore: release v${version}",
"requireCleanWorkingDir": false,
"requireUpstream": false,
"commit": true,
"tag": true,
"push": false
},
"npm": {
"publish": false
}
}
}工作流程
1. 开发新功能
bash
# 创建功能分支
git checkout -b feature/new-feature
# 开发功能
# ... 编写代码 ...
# 使用约定式提交格式提交代码
git add .
git commit -m "feat: 添加新功能"2. 提交信息格式
遵循 约定式提交 规范:
bash
# 格式: <type>(<scope>): <subject>
# 类型:
feat: # 新功能
fix: # 修复 bug
docs: # 文档变更
style: # 代码格式(不影响代码运行的变动)
refactor: # 重构
test: # 增加测试
chore: # 构建过程或辅助工具的变动
# 示例:
git commit -m "feat: 添加深色模式支持"
git commit -m "fix: 修复登录问题"
git commit -m "docs: 更新 README"3. 创建发布
bash
# 运行发布命令
pnpm release
# Release-it 将提示:
# ? Select increment (next version): patch/minor/major
# ? Git tag: v1.1.0
# ? Create a GitHub Release? Yes/No4. 审查和推送
bash
# 审查变更
git log --oneline
# 推送变更和标签
git push origin main
git push --tags变更日志格式
自动生成的变更日志
Release-it 使用 @release-it/conventional-changelog 自动生成变更日志:
markdown
# Changelog
# [1.6.0](/compare/v1.5.0...v1.6.0) (2024-01-15)
### Features
- Add user avatar upload feature
- Add dark mode support
- Optimize page loading speed
### Bug Fixes
- Fix login failure issue
- Fix page refresh issue
- Fix error message display
### Documentation
- Update README
- Add deployment guide
# [1.5.0](/compare/v1.4.0...v1.5.0) (2024-01-01)
### Features
- Initial version release
- Basic feature implementation提交信息类型
| 类型 | 描述 | 版本更新 |
|---|---|---|
feat | 新功能 | Minor |
fix | Bug 修复 | Patch |
feat! 或 BREAKING CHANGE: | 破坏性变更 | Major |
docs | 文档 | 无 |
style | 代码格式 | 无 |
refactor | 重构 | Patch (refactor! 为 minor) |
test | 测试 | 无 |
chore | 构建/工具 | 无 |
perf | 性能优化 | Patch |
ci | CI 配置 | 无 |
发布策略
手动发布
bash
# 查看当前版本
cat package.json | grep version
# 创建发布
pnpm release
# 审查生成的变更日志
cat CHANGELOG.md交互式发布
bash
# 运行并提示选择
pnpm release
# 输出:
# ℹ Current version: 1.5.0
# ? Select increment (next version):
# 1. Patch (1.5.0 → 1.5.1)
# 2. Minor (1.5.0 → 1.6.0)
# 3. Major (1.5.0 → 2.0.0)
# 4. Other...预发布
bash
# 创建预发布(例如 alpha、beta、rc)
pnpm release --preRelease=alpha
pnpm release --preRelease=beta
pnpm release --preRelease=rc
# 版本: 1.6.0 → 1.6.1-alpha.0配置选项
Git 配置
json
{
"git": {
"requireCleanWorkingDir": false, // 允许未提交的变更
"requireUpstream": false, // 不要求远程分支
"commit": true, // 提交版本变更
"tag": true, // 创建 Git 标签
"push": false, // 不自动推送
"commitMessage": "chore: release v${version}"
}
}NPM 配置
json
{
"npm": {
"publish": false, // 不发布到 NPM
"publishPath": ".", // package.json 路径
"allowSameVersion": false // 防止重复版本
}
}插件配置
json
intended
{
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular", // 使用 Angular 预设
"infile": "CHANGELOG.md" // 输出文件
},
"@release-it/bumper": {
"in": "package.json",
"out": "package-lock.json"
}
}
}最佳实践
1. 提交信息
- 使用约定式提交格式
- 清晰简洁
- 适当引用 issue
- 使用现在时态("添加" 而不是 "已添加")
2. 版本管理
- 定期发布
- 保持变更日志更新
- 正确使用语义化版本
- 清楚记录破坏性变更
3. 发布流程
- 发布前充分测试
- 审查生成的变更日志
- 适当标记发布
- 提交时同时推送标签
4. 变更日志
- 启用自动生成
- 审查生成的内容
- 需要时添加额外上下文
- 保持一致性
常见问题
问题 1: 发布失败 "Working directory not clean"
原因: 工作目录有未提交的变更
解决方案:
bash
# 提交或暂存变更
git add .
git commit -m "chore: 更新文件"
# 或配置允许未提交的变更
# 在 package.json 中: "requireCleanWorkingDir": false问题 2: 版本更新错误
原因: 提交信息格式不正确
解决方案:
bash
# 审查提交信息
git log --oneline
# 修正最后提交
git commit --amend -m "fix: 正确的提交信息"问题 3: 变更日志未更新
原因: 插件配置问题
解决方案:
bash
# 检查插件配置
cat package.json | grep "@release-it/conventional-changelog"
# 重新安装依赖
pnpm install