我刚刚在 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"
如何添加/获得此权限?
除了在 npm 配置中设置注册表之外,您还需要在 Github 上生成个人访问令牌并将其添加到您的 npm 配置中:
Generate new token
read:packages
点击
Generate token
并复制令牌
将以下内容添加到本地
.npmrc
:
@${OWNER}:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${TOKEN}
请参阅相关的 Github 包文档
相关:对于 Github Actions,请注意
和个人访问令牌之间的区别。 Github 令牌的权限仅限于包含您的工作流程的存储库。对于其他任何事情(包括超出 Github 令牌允许的细化权限),您需要个人访问令牌。GITHUB_TOKEN
显然我是个白痴,无法阅读文档并错过了那部分:
在
文件所在的同一目录中,创建或编辑package.json
文件以包含指定 GitHub Packages URL 和帐户所有者的行。将 OWNER 替换为拥有包含您的项目的存储库的用户或组织帐户的名称。.npmrc
registry=https://npm.pkg.github.com/OWNER
还有一件事要检查(这花了我一段时间才意识到):
我收到指定的错误:
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 }}
我一直在努力弄清楚为什么 .npmrc 文件只有在我将 PAT 以明文形式放入文件中时才有效,这看起来很愚蠢! 修复方法是将“TOKEN”环境变量设置为工作流程文件的一部分。我有:
- run: npm install
env:
TOKEN: ${{ secrets.TOKEN }}
上面的
secrets.TOKEN
指的是我为需要访问github包的存储库创建的存储库秘密:
(存储库 > 设置 > 安全 > 机密 > 操作)
这个秘密的值是从我为自己创建的个人访问令牌复制的,该令牌仅具有
read:packages
范围:
(用户设置 > 开发者设置 > 个人访问令牌 > 令牌(经典))
看到它检测到此令牌的使用也令人放心!
最后,我的
.npmrc
文件包含:
@shiraze:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=${TOKEN}
我使用自己的用户名而不是适合我的组织名称。我想升级到 Github Enterprise 时可以使用组织名称。
使用此处提到的所有措施(
.npmrc
、个人访问令牌等),我无法将我的私人包发布到组织帐户。一直都是401返回。 10 分钟前,我使用 PAT 从该私人存储库安装了软件包,没有任何问题。
显式登录注册表有帮助:
npm login --registry https://npm.pkg.github.com
Username: <your-github-username-or-organization-name>
Password: <your-github-personal-access-token>
什么给予。