背景
手动发布 npm 包需要本地执行 npm publish,每次都要确保版本号更新、构建完成,且需要配置 npm token。使用 GitHub Actions 可以实现自动化发布,代码推送到 main 分支后自动构建并发布到 npm。
配置
在 .github/workflows/publish.yml 创建以下配置:
name: Publish Package
on:
push:
branches: [main]
permissions:
id-token: write # Required for OIDC
contents: read
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8.6.2
- uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
cache: "pnpm"
# Ensure npm 11.5.1 or later is installed
- name: Update npm
run: npm install -g npm@latest
- run: pnpm install --no-frozen-lockfile
- run: npm run build
- run: npm publish --access public
关键配置说明
OIDC 认证
id-token: write 权限启用 OIDC(OpenID Connect)认证,无需在 GitHub Secrets 中存储 npm token。actions/setup-node@v4 会自动使用 OIDC token 进行 npm 认证。
npm 版本更新
npm 11.5.1+ 版本才支持 OIDC,因此需要先更新 npm 到最新版本。
发布参数
--access public: 发布公开包(scoped package 默认是 private)--no-frozen-lockfile: 允许更新 lockfile,适用于 CI 环境
前置条件
npm 账号配置
- 在 npm 账号设置中启用 “Automation tokens”
- 确保包名在 npm 上可用
package.json 配置
{ "name": "your-package-name", "version": "1.0.0", "scripts": { "build": "your-build-command" } }首次发布
- 首次发布需要手动执行一次
npm publish建立包 - 或确保包名未被占用
- 首次发布需要手动执行一次
工作流程
- 代码推送到
main分支 - GitHub Actions 自动触发
- 安装依赖并构建项目
- 自动发布到 npm(版本号需在 package.json 中手动更新)
注意事项
- 版本号需要在
package.json中手动更新,或使用npm version命令 - 确保
build脚本能正常执行 - 首次使用 OIDC 需要在 npm 账号中启用自动化 token
- 如果发布失败,检查 npm 账号权限和包名是否正确