Files
2026-07-13 21:37:05 +08:00

2.8 KiB
Raw Permalink Blame History

发布工作流

工具

工具 用途
bumpp 交互式版本号递增
changelogen 从提交记录生成变更日志
pkg-pr-new PR 预览包

bumpp(版本号递增)

pnpm add -D bumpp
{
  "scripts": {
    "release": "bumpp"
  }
}

交互式提示选择补丁/次版本/主版本。可选参数:

{
  "scripts": {
    "release": "bumpp --commit --tag --push"
  }
}

针对单体仓库:

bumpp -r    # 递归
bumpp packages/*/package.json  # 指定包

changelogen(变更日志)

pnpm add -D changelogen
{
  "scripts": {
    "changelog": "changelogen --release"
  }
}

组合工作流:

{
  "scripts": {
    "release": "changelogen --release && bumpp"
  }
}

完整发布流程

{
  "scripts": {
    "release": "pnpm lint && pnpm test && changelogen --release && bumpp --commit --tag --push"
  }
}

CI 在标签推送时发布到 npm。

pkg-pr-newPR 预览)

适用于可发布的包。在 PR 上创建安装链接。

# .github/workflows/pkg-pr-new.yml
name: Publish PR
on: pull_request

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: pnpm
      - run: pnpm install
      - run: pnpm build
      - run: pnpm dlx pkg-pr-new publish --compact --pnpm

针对单体仓库:

pnpm dlx pkg-pr-new publish --compact --pnpm './packages/*'

PR 评论会显示:

pnpm add https://pkg.pr.new/your-org/your-package@123

约定式提交

changelogen 正常工作需要:

feat: add dark mode support
fix: resolve memory leak in parser
docs: update README
chore: update dependencies

npm 发布

基于令牌(旧方式)

- run: pnpm publish --access public --no-git-checks
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

OIDC(推荐)

无需令牌。完整配置见 ci-workflows.md。

- run: pnpm publish --access public --no-git-checks --provenance

单体仓库发布

使用 pnpm

pnpm -r publish --access public

使用 bumpp

bumpp -r && pnpm -r publish

预发布版本

bumpp --preid beta   # 1.0.0 -> 1.0.1-beta.0
bumpp --preid alpha  # 1.0.0 -> 1.0.1-alpha.0

Package.json 要求

{
  "name": "@scope/package",
  "version": "1.0.0",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/org/repo.git"
  },
  "publishConfig": {
    "access": "public"
  }
}

repository 对于 npm provenance 是必需的。