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

使用环境变量替代.npmrc中的PAT时GitHub Actions认证失败

解决GitHub Actions发布GitHub Packages时401认证失败的问题

问题根源

你提交到仓库的.npmrc里写的${GITHUB_TOKEN}是无效的——npm不会自动把这个占位符替换成环境变量里的真实token,导致认证时拿不到有效凭据,自然报401。

具体解决步骤

1. 修正仓库里的.npmrc

把涉及GitHub Packages认证的行删掉,只保留公共npm源的配置,避免提交无效或敏感内容:

registry=https://registry.npmjs.com
always-auth=true

2. 修改GitHub Actions工作流

在工作流里动态生成GitHub Packages的认证配置,不要依赖提交的.npmrc:

name: component_4 publish

on:
  push:
    branches:
     - main

jobs:
  publish-gpr:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
          registry-url: 'https://registry.npmjs.com'
          always-auth: true
      # 动态追加GitHub Packages的配置到.npmrc
      - run: |
          echo "@my-org:registry=https://npm.pkg.github.com" >> .npmrc
          echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> .npmrc
      - run: npm ci
      - run: npx semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # 如果要同时发布到npm官方仓库,需要添加NPM_TOKEN密钥并传入
          # NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

3. 检查工作流权限(如果还是失败)

如果调整后仍然报401,去仓库的「Settings」→「Actions」→「General」里,找到「Workflow permissions」,确保选了「Read and write permissions」,保存后重新跑工作流。

更简洁的替代写法

如果你的包只发布到GitHub Packages,可以直接用actions/setup-node的参数配置,不用手动写.npmrc:

- uses: actions/setup-node@v3
  with:
    node-version: 16
    registry-url: 'https://npm.pkg.github.com'
    always-auth: true
  env:
    NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

这种写法会让setup-node自动生成带正确认证的.npmrc,省掉手动追加的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:45:54