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

如何从CircleCI向私有npm仓库发布包?发布失败求助

排查CircleCI发布npm包失败的常见遗漏点

针对你遇到的CircleCI发布npm包始终报错的问题,结合你提供的配置,以下是几个容易遗漏的排查方向:

1. YAML配置的缩进错误

你提供的第一个配置中,Build package步骤的command键缩进异常:

- run: 
    name: Build package
     command: yarn build // tsc builds package to the lib directory

YAML对缩进有严格要求,command和name是同级键,缩进必须完全一致,这个错误会导致CircleCI无法正确解析配置,直接引发执行失败。

2. NPM_TOKEN的权限与环境变量验证

  • 确认token类型:npm的访问令牌分「只读」「自动化」「发布」三种,必须使用Automation类型的令牌(用于CI/CD自动化发布),只读令牌无法执行publish操作。同时要确保令牌所属账号是目标npm包的所有者或拥有发布权限。
  • 检查CircleCI变量配置:
    • 环境变量名必须是NPM_TOKEN,大小写完全匹配,不能有拼写错误。
    • 变量需设置在当前项目的上下文里,避免选错组织或项目导致变量无法读取。
    • 可以临时在CI步骤中添加echo $NPM_TOKEN(测试完成后删除),验证变量是否能正常读取。

3. .npmrc的配置细节

  • 避免变量解析异常:建议用大括号包裹变量,确保shell正确解析:
    echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
    
  • 确认.npmrc生效位置:优先使用用户目录下的~/.npmrc,而非项目目录,避免项目中已有.npmrc覆盖配置。
  • 检查npm配置优先级:可以在publish前添加npm config list,查看当前的registry和authToken配置是否正确。

4. 发布目录的合法性

执行npm publish lib时,必须确保lib目录下存在完整的package.json,且该文件中:

  • 没有设置private: true(私有包无法公开发布,若为私有包需指定--access restricted参数)
  • name和version符合npm的规范,且版本号未在npm仓库中存在过

5. Node/npm版本兼容性

CircleCI的node executor默认版本可能与本地开发环境不一致,部分旧版本npm在处理认证时存在bug。建议指定与本地一致的Node版本,例如:

executor: node:18

修正后的参考配置

jobs:
  publish:
    executor: node:18
    steps:
      - checkout
      - install
      - run:
          name: Build package
          command: yarn build
      - run:
          name: Authenticate with npm registry
          command: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
      - run:
          name: Verify npm config
          command: npm config list
      - run:
          name: Publish library
          command: npm publish lib

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:00:42