从GitHub Actions发布NPM包至GitHub Packages遇E400认证错误
解决GitHub Actions发布到GitHub Packages的E400认证错误
嘿,我来帮你搞定这个烦人的E400认证错误!从你的配置来看,主要有两个核心问题需要修正:
1. 默认GITHUB_TOKEN权限不足
GitHub Actions提供的默认GITHUB_TOKEN虽然能访问仓库,但没有发布GitHub Packages的权限。你需要在workflow里显式为它添加write:packages权限,或者改用个人访问令牌(PAT)。
方案A:为默认GITHUB_TOKEN添加权限
在你的workflow最顶部(jobs之前)添加权限配置:
name: Node install, build and test on: [push] # 新增权限配置,赋予发布packages的权限 permissions: contents: read packages: write jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [12.x] steps: - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} # 简化npmrc配置,去掉冗余步骤 - name: Configure npm for GitHub Packages run: | echo "@your-username:registry=https://npm.pkg.github.com/" >> ~/.npmrc echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> ~/.npmrc - name: Publish to Github Packages run: npm publish
注意替换@your-username为你的GitHub用户名或组织名,这个必须和你package.json里的name字段前缀一致(比如"name": "@your-username/your-package")。
方案B:使用个人访问令牌(PAT)
如果默认token的权限调整还是不行,你可以创建一个PAT,勾选write:packages、read:packages和repo权限,然后把它添加到仓库的Secrets里(命名为GH_PAT),再在workflow里替换GITHUB_TOKEN为GH_PAT:
# 在Configure npm步骤里改成: echo "//npm.pkg.github.com/:_authToken=${{ secrets.GH_PAT }}" >> ~/.npmrc
2. 移除冗余的npm配置步骤
你原来的配置里同时用了echo创建npmrc和npm config set _auth,这会造成配置冲突。只需要用echo正确写入npmrc即可,不需要额外的npm config set命令。
最后检查package.json
确保你的name字段包含GitHub用户名/组织的scope,比如:
{ "name": "@your-username/your-package-name", "publishConfig": { "registry": "https://npm.pkg.github.com/" } }
这样调整后,应该就能成功发布到GitHub Packages了!
内容的提问来源于stack exchange,提问作者SebastianG
相关产品推荐
相关产品推荐

