当我尝试通过GitHub动作安装npm
模块时,出现以下错误:
npm ERR! 401 Unauthorized - GET https://npm.pkg.github.com/@xxxx%2fxxxx-analytics - Your request could not be authenticated by the GitHub Packages service. Please ensure your access token is valid and has the appropriate scopes configured.
在发表评论之前,我已经使用范围和访问令牌正确配置了.npmrc,并且在本地安装私有软件包时一切正常。
这是我的GitHub工作流程操作:
name: JavaScript workflow
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: npmrc
run: cat .npmrc
- name: npm install
run: |
npm install
env:
CI: true
NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
这是我的.npmrc
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=XXXXXXXXX
@colonynetworks:registry=https://npm.pkg.github.com
//npm.pkg.github.com:_authToken=XXXXXXXXX
always-auth=true
@react-admin:registry=https://registry.marmelab.com
//registry.marmelab.com:
_auth=XXXXXXXXX
email=software@XXXXXXXXX.com
always-auth=true
这是一个私人存储库,并且authTokens当前已硬编码在.npmrc文件中。
但是,在尝试找到解决方案时,我确实遇到了Github工作人员的这个随机评论:https://github.community/t/netlify-getting-401-from-github-package-registry-with-auth-token/16415/3
这有点含糊,但听起来好像它不接受.npmrc文件中的硬编码authToken。
所以我尝试的第一件事是像这样使用我们的env变量:
@xxxx=https://npm.pkg.github.com
//npm.pkg.github.com:_authToken=${NPM_AUTH_TOKEN}
env变量在我们的Github存储库秘密中是正确的,并且由工作流提供。
但是,这仍然会导致相同的401未经授权错误。
通过查看其他解决方案,我然后尝试在install
步骤之前,在Github动作中手动生成.npmrc,如下所示:
- name: npmrcgen
run: |
echo "//npm.pkg.github.com/:_authToken=XXXXXXX" > .npmrc
echo "@xxxxx=https://npm.pkg.github.com/" >> .npmrc
echo "@react-admin:registry=https://registry.marmelab.com" >> .npmrc
echo "//registry.marmelab.com:" >> .npmrc
echo "_auth=XXXXXXX" >> .npmrc
echo "email=software@xxxxx.com" >> .npmrc
echo "always-auth=true" >> .npmrc
在我添加的日志记录步骤中,它的_authToken(仅适用于Github)仍然显示为***
,并且仍然出现401未经授权的错误。
在这一点上,我想确认.npmrc是否还在使用中,因此我删除了用于marmelab.com
的第二个私有注册表,果然,我收到一条错误消息,说它不再能够安装他们的ra-realtime
软件包。这证明.npmrc文件确实已由我的Github操作读取和使用,但不接受我的Github个人访问令牌。
我也尝试生成一个新令牌。它具有对repo:
下的所有内容以及write:packages
和read:packages
下所有内容的完全访问权限。
在GitHub动作中仍然未授权401,并且在本地仍然可以正常工作。
最近,我尝试使用yarn
而不是npm
安装它。毫不奇怪,这也没有解决。
我已经看到并尝试了以下解决方案,但均未成功:
我没有尝试过一件事,因为我没有看到关于如何或这是一个好主意的建议,但是我没有在Github动作中做过npm login
。既然没有人做到这一点,并且以某种方式使它起作用,那么我认为这是没有必要的。
答案 0 :(得分:3)
我最终不得不联系GitHub支持,并允许他们访问我的存储库以解决此问题。
但是他们确实找出了问题所在。
Github工作流程比本地环境更严格,并在auth令牌之前退回额外的/
:
发现差异:
//npm.pkg.github.com:_authToken=XXXXXXXXX
//npm.pkg.github.com/:_authToken=XXXXXXXXX
在/
之前添加额外的:_authToken=
为我解决了这个问题。
答案 1 :(得分:0)
在项目的根目录中有一个 .npmrc 文件。 .npmrc 的内容:
registry=https://registry.npmjs.org/
@{scope}:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=********** (Token generated from github)
@{scope} 是您的组织名称或用户名。区分大小写。