如何在Github Action中发布依赖私有包的私有NPM包
解决方案
问题根因
你遇到的404报错是因为npm默认到公共npm registry(https://registry.npmjs.org)查找@wilson前缀的私有包,而你的@wilson/monday是存放在Github Packages私有源中的,没有同步到公共npm源,因此无法找到。
具体修改步骤
- 调整Github Action配置(npm.yml)
- 给
actions/setup-node添加scope配置,指定@wilson前缀的包都从Github Packages拉取 - 给依赖安装步骤也配置
NODE_AUTH_TOKEN环境变量,确保有权限拉取私有包 - 删除冗余的
npm install步骤,npm ci本身会根据package-lock.json安装精确版本依赖,提前跑npm install会修改锁文件,失去ci的意义 - 发布步骤的token确保有对应Packages的读写权限
- 验证权限配置
- 如果你使用的是Github自带的
GITHUB_TOKEN,需要确保同组织下的包已经设置了允许组织内Actions读取的权限 - 如果是跨组织拉包或者
GITHUB_TOKEN权限不足,可以生成个人访问令牌(PAT),勾选read:packages和write:packages权限,存到仓库Secrets中使用
- 可选临时生成.npmrc的方案(如果不想改setup-node配置)
可以在依赖安装前添加一步,临时生成.npmrc配置,不需要提交到代码仓库:
- run: echo "@wilson:registry=https://npm.pkg.github.com" >> .npmrc
修改后的完整配置示例
npm.yml:
name: npm on: release: types: [published] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [12.x] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '12.x' registry-url: 'https://npm.pkg.github.com' scope: '@wilson' # 新增scope配置 - run: npm ci --ignore-scripts env: NODE_AUTH_TOKEN: ${{ secrets.GH_PACKAGES_TOKEN }} # 给安装步骤添加授权token - run: npm run build --if-present - run: npm publish env: CI: true NODE_AUTH_TOKEN: ${{ secrets.GH_PACKAGES_TOKEN }}
你当前的package.json配置是正确的,publishConfig里的registry和access配置符合Github Packages的要求,无需修改。
内容的提问来源于stack exchange,提问作者GʀᴜᴍᴘʏCᴀᴛ
相关产品推荐
相关产品推荐

