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

GitHub自动化工作流发布npm包遇401认证错误求助

GitHub Actions发布npm包到GitHub Packages时401未授权问题排查

本地成功发布步骤

本地执行以下命令可成功将npm包发布到GitHub Packages:

echo "@myorganization:registry=https://npm.pkg.github.com" > .npmrc
echo "//npm.pkg.github.com/:username=myname" >> .npmrc
echo "//npm.pkg.github.com/:_authToken=xyz" >> .npmrc
npm publish

GitHub Actions工作流配置

编写的.yml工作流文件如下:

on:
    release:
        types: [created]
  
jobs:     
   
    build:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v3
            - uses: actions/setup-node@v3
              with:
                node-version: 18
            - run: npm ci
            - run: npm test

    publish-gpr: 
        needs: build
        runs-on: ubuntu-latest
        permissions: 
            packages: write
            contents: read
        steps:
            - uses: actions/checkout@v3
            - uses: actions/setup-node@v3 
              with:
                node-version: 16
                registry-url: https://npm.pkg.github.com/              
            - name: npm publish
              env:
                NODE_AUTH_TOKEN: ${{secrets.MY_TOKEN}
              run: |
                echo "myorganization:registry=https://npm.pkg.github.com" > .npmrc
                echo "//npm.pkg.github.com/:username=myname" >> .npmrc
                echo "//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN:?}" >> .npmrc
                npm publish

错误信息

执行工作流时触发401未授权错误:

...
npm notice Publishing to https://npm.pkg.github.com
npm ERR! code E401
npm ERR! 401 Unauthorized - PUT https://npm.pkg.github.com/@myorganization%2fmyrepository - unauthenticated: User cannot be authenticated with the token provided.
...

排查与解决方法

  1. 修复环境变量语法错误
    你写的NODE_AUTH_TOKEN: ${{secrets.MY_TOKEN} 缺少闭合的大括号,正确写法应为${{ secrets.MY_TOKEN }}。语法错误会导致变量无法解析为实际token值,直接输出字符串,自然无法完成授权验证。

  2. 简化.npmrc配置流程
    actions/setup-node本身支持自动配置.npmrc,无需手动echo写入,避免人为配置错误。修改后的publish步骤可简化为:

    - uses: actions/setup-node@v3 
      with:
        node-version: 16
        registry-url: https://npm.pkg.github.com/
        scope: "@myorganization" # 自动绑定组织的registry配置
      env:
        NODE_AUTH_TOKEN: ${{ secrets.MY_TOKEN }}
    - run: npm publish
    
  3. 验证Token权限与正确性

    • 确认secrets.MY_TOKEN对应的个人访问令牌(PAT)已开启write:packages权限,且令牌所属用户拥有发布到@myorganization组织包的权限。
    • 可临时添加步骤run: echo $NODE_AUTH_TOKEN(仅限私有仓库测试,避免泄露令牌),确认变量是否能正确输出令牌值。
  4. 统一Node.js版本
    Build与Publish阶段使用不同的Node.js版本(18和16)可能导致依赖或发布行为不一致,建议统一为同一版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:03:27