Skip to content

Release

发布一个版本通常需要以下步骤:

  1. 检查当前工作目录代码是否已全部提交
  2. 更新 package.json 中的版本号
  3. 生成 CHANGELOG.md 文件
  4. 提交 package.jsonCHANGELOG.md 文件
  5. 打标签
  6. 推送标签到远程仓库
  7. 发布包

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-tags

CHANGELOG

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