无法使用托管在 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 节点、标准环境一起使用

如何使托管在 Amazon S3 上的图像不那么公开但不完全私有?

从私有 gitlab 注册表安装多个 npm 包

无法从 Heroku 上的 package.json 从 github 安装 npm 包