无法使用托管在 GPR 上的私有 NPM 包
Posted
技术标签:
【中文标题】无法使用托管在 GPR 上的私有 NPM 包【英文标题】:Cannot consume private NPM package hosted on GPR 【发布时间】:2021-05-19 23:34:13 【问题描述】:我有一个私人仓库,使用 Github Actions 工作流程,我已在 Github 包注册表上作为私有 npm 包发布。我想在我的另一个私人项目的范围内使用这个包。但是有一个问题。将 GPR 托管包作为依赖项导入后,出现“未找到模块”错误。
-
Github Actions 工作流成功将私有 npm 包发布到 GPR。
已发布的包显示在 Github 用户登陆时的“包”选项卡下。
GPR_ACCESS_TOKEN 是一个 PAT(确保我可以使用该软件包)。
图片: the error in question
.npmrc 文件位于项目根目录,使用私有包
@slackermorris:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=XXXX-XXXX-XXXX-XXXX
Github Action 负责将私有 npm 包重新发布到 Github Registry。
name: Node.js Package
on:
push:
branches:
- master
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- run: npm ci
- run: npm test
env:
CI: true
publish-gpr:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
registry-url: https://npm.pkg.github.com
scope: slackermorris
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: $secrets.GPR_ACCESS_TOKEN
已发布 npm 包的 package.json。
"name": "@slackermorris/bostock-metaball-animation",
"version": "1.0.3",
"main": "index.js",
"author": "slackermorris",
"license": "MIT",
"publishConfig":
"registry": "https://npm.pkg.github.com"
...
【问题讨论】:
【参考方案1】:你正在尝试的应该工作,但我可以确认它没有。比将您的令牌放入 .npmrc 更好的是,将您的个人访问令牌存储在由工作流导出的存储库机密中。 IE,使用您的 PAT 的内容创建一个名为 GPR_AUTH_TOKEN
的 repo secret。然后将其添加到您的工作流程中:
env:
GPR_AUTH_TOKEN: $ secrets.GPR_AUTH_TOKEN
然后让您的 .npmrc 通过 env 变量加载令牌:
//npm.pkg.github.com/:_authToken=$GPR_AUTH_TOKEN
这样可以避免将您的 PAT 暴露给拥有 repo 访问权限的所有人。
该解决方案适用于 node.js v16,但不适用于节点 14。
适用于每个 LTS 版本的 Node.js 是在您的工作流程中使用此 npm 步骤配置 .npmrc
:
- name: Configure NPM
run: npm config set '//npm.pkg.github.com/:_authToken' "$secrets.GPR_AUTH_TOKEN"
之后,npm install
按预期工作。
【讨论】:
以上是关于无法使用托管在 GPR 上的私有 NPM 包的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Gitlab 上发布私有 npm 包 - E404 Not found PUT
Yarn 包管理器:从私有 Bitbucket 存储库安装依赖项
如何将私有、自托管的 NPM 包与 Google App Engine 节点、标准环境一起使用