Skip to content

版本和日志管理

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 release

3. 发布流程

Release-it 将:

  1. 更新 package.json 中的版本号
  2. 更新 CHANGELOG.md
  3. 创建 Git 标签
  4. 提交变更
  5. 可选发布到 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/No

4. 审查和推送

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
fixBug 修复Patch
feat!BREAKING CHANGE:破坏性变更Major
docs文档
style代码格式
refactor重构Patch (refactor! 为 minor)
test测试
chore构建/工具
perf性能优化Patch
ciCI 配置

发布策略

手动发布

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

相关资源