You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用semantic-release同时发布npm包到GitHub和npmjs?

解决semantic-release同时发布npm包到GitHub Packages与npmjs的问题

核心思路

让semantic-release单次运行完成版本计算、标签创建,同时配置两个npm发布插件实例,分别指向GitHub Packages和npmjs,避免重复操作或无效发布。

具体配置步骤

1. 配置semantic-release的发布文件

在项目根目录创建或修改.releaserc.json,添加两个@semantic-release/npm插件实例,分别指定对应仓库的registry和凭证:

{
  "branches": ["main"], // 根据你的主分支名称调整
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    "@semantic-release/git",
    "@semantic-release/github",
    // 发布到GitHub Packages
    [
      "@semantic-release/npm",
      {
        "registry": "https://npm.pkg.github.com/",
        "npmPublishToken": "${process.env.GH_TOKEN}",
        "pkgRoot": "dist" // 若你的包构建后在dist目录,否则可移除
      }
    ],
    // 发布到npmjs
    [
      "@semantic-release/npm",
      {
        "registry": "https://registry.npmjs.org/",
        "npmPublishToken": "${process.env.NPM_TOKEN}",
        "pkgRoot": "dist"
      }
    ]
  ]
}

2. CI环境变量配置

在CI流程中(比如GitHub Actions、GitLab CI等),设置两个环境变量:

  • GH_TOKEN: 拥有GitHub Packages发布权限的个人访问令牌(需勾选write:packages权限)
  • NPM_TOKEN: npmjs的发布令牌(需对应包的发布权限)

3. 简化CI工作流

调整后的CI流程只需:

  • 执行构建、测试等前置操作
  • 执行npx semantic-release

这样semantic-release会在单次运行中:

  1. 分析提交记录,判断是否需要发布新版本
  2. 若需发布,计算版本号、生成Release Notes、创建Git标签
  3. 依次将包发布到GitHub Packages和npmjs
  4. 若无需发布,直接跳过所有发布步骤,避免重复发布旧版本报错

注意事项

  • GitHub Packages的包名需带组织scope,比如@your-github-org/package-name,确保package.json中的name字段符合要求
  • 可通过npx semantic-release --dry-run测试配置,不会实际发布包
  • 若项目无构建产物,可移除配置中的pkgRoot字段

内容的提问来源于stack exchange,提问作者AwesomeTown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:25:33