mcpField
R
release-it

release-it

官方Agent-ready
github.com开发者工具9.1krelease-it3 周前更新
代码仓库访问官网

关于 release-it

release-it 自动化处理版本号更新、变更日志生成、Git 标签创建和包发布等重复性任务。支持通过配置文件定制发布工作流,与 npm、Git 和多个代码托管平台集成。

主要功能

  1. 01自动更新版本号并生成 Git 标签
  2. 02自动生成或更新项目的变更日志文件
  3. 03发布到 npm 和其他包管理器
  4. 04支持预发布、制作环节预演和自定义钩子

适用场景

  1. 01简化开源项目的定期版本发布流程
  2. 02在 CI/CD 流程中自动化包版本管理和发布
  3. 03减少手动操作带来的发布错误和版本混乱

安装

选择你的系统或包管理器,复制命令到终端运行。

$
npm install -D release-it

安装完成后运行release-it --version确认安装成功。

命令示例

常用命令按使用顺序排列。

01
npx release-it
02
npx release-it --dry-run

详细介绍

Release It! 🚀

🚀 用于自动执行版本管理和软件包发布相关任务的通用 CLI 工具:

README 配图

使用 release-it 管理版本,并通过灵活的配置、强大的插件系统和钩子,在任何地方发布。钩子可执行你需要的任意命令,用于测试、构建和/或发布项目。

Action Status npm version

你在工作中使用 release-it 吗?欢迎考虑赞助我!

安装

虽然 release-it 是一款通用发布工具,但大多数项目会将它用于包含 npm 软件包的项目。推荐通过 npm 安装 release-it,并添加一些最精简的配置以便开始使用:

npm init release-it

你也可以手动安装,并将 release 脚本添加到 package.json:

npm install -D release-it
{
  "name": "my-package",
  "version": "1.0.0",
  "scripts": {
    "release": "release-it"
  },
  "devDependencies": {
    "release-it": "^21.0.0"
  }
}

使用方法

在项目根目录下使用 npm run 或 npx 运行 release-it:

npm run release
npx release-it

系统会提示你选择新版本,并根据你的配置显示后续提示。

Yarn 和 pnpm

Monorepo

使用 Monorepo?请参阅这份 Monorepo 配方。

全局安装

推荐像上文所示那样按项目安装,但也支持全局安装:

  • 从 npm 安装:npm install -g release-it
  • 从 Homebrew 安装:brew install release-it

容器化

使用 Release It! - Containerized,即可在任何环境中将其作为标准化容器运行,无需 Node 环境。感谢 Juan Carlos!

视频、文章和示例

以下是一些有趣的外部资源:

想将你的内容添加到列表中?只需提交一个拉取请求!

配置

release-it 开箱即用,具有合理的默认值,并提供丰富的选项供你配置。大多数项目会在项目根目录中使用 .release-it.json 文件,或在 package.json 中使用 release-it 属性。

以下是一个简短的 .release-it.json 示例:

{
  "$schema": "https://unpkg.com/release-it@20/schema/release-it.json",
  "git": {
    "commitMessage": "chore: release v${version}"
  },
  "github": {
    "release": true
  }
}

→ 详情请参阅配置。

交互模式与 CI 模式

默认情况下,release-it 采用交互模式,允许你在执行每项任务前进行确认:

README 配图

使用 --ci 选项后,整个流程会自动运行,不再显示提示。系统将执行已配置的任务,如上方第一个动画所示。在持续集成(CI)环境中,此非交互模式会自动启用。

使用 --only-version 仅通过提示来确定版本,并自动执行其余操作。

最新版本

release-it 如何确定最新版本?

  1. 对于包含 package.json 的项目,将使用其中的 version(如需跳过此项,请参阅 npm)。
  2. 否则,release-it 会使用最新的 Git 标签来确定要发布的版本。
  3. 如果以上方法都不可用,则会使用 0.0.0 作为最新版本。

你也可以使用插件来覆盖此行为(例如,管理 VERSION 或 composer.json 文件):

添加 --release-version 标志,即可输出下一个版本,而不执行发布。如果没有可用的下一个版本,则不会输出任何内容,并会成功退出。

Git

release-it 对 Git 项目的支持完善,可自动完成暂存、提交、打标签并将发行版本推送到任意 Git 远程仓库。

→ 更多详情请参阅 Git。

npmjs.com 发行

截至 2025 年 7 月,GitHub 和 GitLab CI 工作流现在可以使用 npm 的 Trusted Publishing OpenID Connect(OIDC)集成,实现安全的无令牌 CI/CD 发布。这可以消除长期有效的令牌,并自动生成来源证明。详情请参阅 docs/npm.md。

GitHub 发行

GitHub 项目可以将发行版本关联到 Git 标签,并附上发行说明和资源。在 release-it 工作流中添加 GitHub 发行有两种方式:

  1. 自动化(需要 GITHUB_TOKEN)
  2. 手动(使用预填充字段的 GitHub 网页界面)

→ 更多详情请参阅 GitHub Releases。

GitLab 发行

GitLab 项目可以将发行版本关联到 Git 标签,并附上发行说明和资源。若要自动化 GitLab 发行:

→ 更多详情请参阅 GitLab Releases。

更新日志

默认情况下,release-it 会生成更新日志,用于显示并帮助选择新发行版本的版本号。此外,此更新日志还会作为 GitHub 或 GitLab 发行版本的发行说明。

默认命令基于 git log ...。此设置(git.changelog)可以覆盖。若要进一步自定义 GitHub 或 GitLab 发行版本的发行说明,可以使用 github.releaseNotes 或 gitlab.releaseNotes。请确保这些命令中的任意一个都将更新日志输出到 stdout。请注意,release-it 默认不限定提交消息规范。以下插件可供使用:

  • GitHub 和 GitLab 发行
  • auto-changelog
  • Conventional Changelog
  • Keep A Changelog
  • git-cliff

若要在不发行任何内容的情况下打印更新日志,请添加 --changelog 标志。

→ 更多详情请参阅 Changelog。

发布到 npm

如果当前目录中有 package.json,release-it 会让 npm 更新 package.json 中的版本(如果存在,也会更新 package-lock.json),并发布到 npm 注册表。

→ 更多详情请参阅 Publish to npm。

管理预发行版本

使用 release-it 可以轻松创建预发行版本:这是一种尚未进入稳定 semver 范围、但希望提前提供给用户的软件版本。预发行版本通常使用“alpha”、“beta”和“rc”(发行候选版)作为标识符。预发行版本示例:2.0.0-beta.0。

→ 更多详情请参阅 Manage pre-releases。

更新或重新运行现有发行版本

使用 --no-increment 不增加版本号,而是更新最后一个现有标签/版本。

如果版本号已经增加过,这会很有帮助。以下是一些示例场景:

  • 为现有 Git 标签更新或发布(草稿)GitHub 发行版本。
  • 发布到 npm 已成功,但将 Git 标签推送到远程仓库失败。此时使用 release-it --no-increment --no-npm 跳过 npm publish,并再次尝试推送同一个 Git 标签。

Hooks

使用脚本钩子,在发布流程的任意时刻运行 shell 命令(例如 before:init 或 after:release)。

格式为 [prefix]:[hook] 或 [prefix]:[plugin]:[hook]:

部分值
prefixbefore 或 after
pluginversion、git、npm、github、gitlab
hookinit、bump、release

使用中间可选的 :plugin 部分,可在任何插件的生命周期方法之前或之后准确地挂接钩子。

核心插件包括 version、git、npm、github、gitlab。

请注意,如果 git push 失败,或者配置为不执行(例如 git.push: false),则 after:git:release 之类的钩子不会运行。有关插件生命周期方法执行顺序的更多信息,请参阅执行顺序。

使用 --no-hooks 跳过所有钩子,或从命令行禁用单个钩子(例如 --no-hooks.before:init)。

所有命令都可以使用配置变量(例如模板字符串)。也可以提供命令数组,它们会依次运行。以下是一些 release-it 配置示例:

{
  "hooks": {
    "before:init": ["npm run lint", "npm test"],
    "after:my-plugin:bump": "./bin/my-script.sh",
    "after:bump": "npm run build",
    "after:git:release": "echo After git push, before github release",
    "after:release": "echo Successfully released ${name} v${version} to ${repo.repository}."
  }
}

变量可在默认配置中找到。此外,还提供了以下变量:

version
latestVersion
changelog
name
repo.remote, repo.protocol, repo.host, repo.owner, repo.repository, repo.project
branchName
releaseUrl

所有钩子都可以使用所有变量。唯一的例外是,上面列出的附加变量在 init 钩子中尚不可用。

使用 --verbose 记录命令的输出。

为完整起见,钩子的完整列表实际上是:init、beforeBump、bump、beforeRelease、release 或 afterRelease。不过,像 before:beforeRelease 这样的钩子看起来很奇怪,实际使用中通常也没有用。

请注意,从命令行使用时,参数需要正确加引号:

release-it --'hooks.after:release="echo Successfully released ${name} v${version} to ${repo.repository}."'

在自定义钩子脚本中使用 @inquirer/prompts 可能会导致问题(因为 release-it 本身也会使用它)。

Dry Runs

使用 --dry-run 查看交互过程以及将要执行的命令。

→ 更多详情请参阅 Dry Runs。

故障排除与调试

  • 使用 release-it --verbose(或 -V)时,release-it 会打印每个用户定义的钩子的输出。
  • 使用 release-it -VV 时,release-it 还会打印每条内部命令的输出。
  • 使用 NODE_DEBUG=release-it:* release-it [...] 打印配置和更多错误详情。

在配置文件中使用 verbose: 2,即可获得与在命令行中使用 -VV 相同的效果。

插件

从 v11 开始,release-it 可以通过许多方式扩展。以下是一些插件:

插件描述
@release-it/bumper从任意文件读取版本并将版本写入任意文件
@release-it/conventional-changelog提供推荐的版本升级、conventional-changelog,并更新 CHANGELOG.md
@release-it/keep-a-changelog按照 Keep a Changelog 标准维护 CHANGELOG.md
@release-it-plugins/lerna-changelog将 lerna-changelog 集成到 release-it 发布流程中
@jcamp-code/release-it-changelogen使用 @unjs/changelogen 进行版本管理和生成变更日志
@release-it-plugins/workspaces发布配置为工作区的每个项目
release-it-calver-plugin通过 release-it 启用日历版本控制(calver)
@grupoboticario/news-fragments一种轻松生成变更日志文件的方式
@j-ulrich/release-it-regex-bumper基于正则表达式的 release-it 版本读取/写入插件
@jcamp-code/release-it-dotnet使用 .csproj 或 .props 文件进行版本管理,自动发布 NuGet
release-it-pnpm添加 pnpm 工作区的基本支持,并与 bumpp 和 changelogithub 集成
changesets-release-it-plugin将 Changesets 变更日志管理与 release-it 结合
release-it-giteaGitea 插件,用于创建 Gitea 发布并上传附件
release-it-beautiful-changelog使用 conventional commits 通过 @unjs/changelogen 生成美观的变更日志
release-it-git-cliff使用 git-cliff 确定下一个版本并生成变更日志

在内部,release-it 使用自己的插件架构(用于 Git、GitHub、GitLab、npm)。

→ 查看 npm 上的所有 release-it 插件。

→ 查看 插件 文档,了解如何编写插件。

以编程方式使用 release-it

release-it 主要作为命令行工具使用,也可以作为依赖项集成到你自己的脚本中。请参阅以编程方式使用 release-it,查看示例代码。

使用 release-it 的项目

Node.js 版本支持

最新的主版本是 v21,支持 Node.js 22.21 及更高版本:

release-itNode.js
v21v22.21.0
v20v20.19.0
v19v20.12.0
v18v20
v17v18
v16v16
v15v14

日期和详情另请参阅 CHANGELOG.md。

链接

许可证

MIT

在工作中使用 release-it?欢迎考虑赞助我!

评论

支持 Markdown