我刚刚在GitHub上发布了一个私有软件包,试图弄清楚它应该如何工作。现在我正在尝试将其安装在另一个项目中。我使用具有npm login --registry=https://npm.pkg.github.com
,write:packages
和read:packages
特权的访问令牌向repo
进行了身份验证。尝试运行npm install https://npm.pkg.github.com/@orgname/package-name
时收到错误消息:
npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"
如何添加/获取此特权?
答案 0 :(得分:20)
除了在npm配置中设置注册表之外,您还需要在Github上生成个人访问令牌并将其添加到您的npm配置中。
https://github.com/settings/tokens
(“设置”>“开发者设置”>“个人访问令牌”),您应该看到类似以下内容的内容:Generate new token
read:packages
点击Generate token
并复制令牌
将以下内容添加到本地.npmrc
:
@{{OWNER}}:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken={{TOKEN}}
相关:对于Github Actions,请注意
GITHUB_TOKEN
与个人访问令牌之间的区别。 Github令牌的权限为limited to the repository that contains your workflow。对于其他任何事情(包括超出Github令牌所允许的细粒度权限),您都需要一个个人访问令牌。
答案 1 :(得分:4)
显然我是个白痴,看不懂文档,却错过了这一部分:
在与
package.json
文件相同的目录中,创建或编辑.npmrc
文件,以包含指定GitHub Packages URL和帐户所有者的行。将OWNER替换为拥有包含您的项目的存储库的用户或组织帐户的名称。
registry=https://npm.pkg.github.com/OWNER
答案 2 :(得分:1)
要检查的另一件事(这花了我一段时间才意识到):
我收到了指定的错误:
npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"
即使我认为我正确地提供了具有所需权限的 GITHUB TOKEN。
我已将我的 github 操作设置为从名为 NODE_AUTH_TOKEN
的组织机密中设置 GPR_PRIVATE_READ_TOKEN
,该机密在另一个存储库中工作。
事实证明问题是秘密被定义为仅对私有存储库可用,而我试图在公共存储库中使用它。当我将机密提供给公共存储库时,一切正常。
我的工作流作业看起来像这样(我展示了安装步骤之前的所有步骤,以防有人看到它有帮助):
jobs:
ci:
name: Run Tests
steps:
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
registry-url: https://npm.pkg.github.com/
- uses: actions/checkout@v2
- name: Install dependencies based on package-lock.json
run: npm ci
env:
NODE_AUTH_TOKEN: ${{ secrets.GPR_PRIVATE_READ_TOKEN }}
答案 3 :(得分:0)
答案 4 :(得分:0)
这对我有用
C:\Program Files\nodejs\node_modules\npm\npmrc
在此处更新文件,您的错误将得到解决