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. ...
排查与解决方法
修复环境变量语法错误
你写的NODE_AUTH_TOKEN: ${{secrets.MY_TOKEN}缺少闭合的大括号,正确写法应为${{ secrets.MY_TOKEN }}。语法错误会导致变量无法解析为实际token值,直接输出字符串,自然无法完成授权验证。简化.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验证Token权限与正确性
- 确认
secrets.MY_TOKEN对应的个人访问令牌(PAT)已开启write:packages权限,且令牌所属用户拥有发布到@myorganization组织包的权限。 - 可临时添加步骤
run: echo $NODE_AUTH_TOKEN(仅限私有仓库测试,避免泄露令牌),确认变量是否能正确输出令牌值。
- 确认
统一Node.js版本
Build与Publish阶段使用不同的Node.js版本(18和16)可能导致依赖或发布行为不一致,建议统一为同一版本。
内容的提问来源于stack exchange,提问作者user15883430
相关产品推荐
相关产品推荐

