繁体   English   中英

如何使用 Firebase Cloud Functions.npmrc 设置私有 NPM 模块?

[英]How To Setup Private NPM Module With Firebase Cloud Functions .npmrc?

我创建了一个私有类型 npm 模块,用于我的 firebase 函数和应用程序项目。 当我去部署 firebase 函数时,每个 function 都会出现一个大错误,基本上是ERR: remote. Invalid username or password. ERR: remote. Invalid username or password.

对于我所阅读的内容,看起来我需要创建一个 .npmrc 文件并将其放在 /functions 目录中。 ( https://cloud.google.com/functions/docs/writing/specifying-dependencies-nodejs#using_private_modules )

但是,我无法在任何地方找到有关如何执行此操作的正确说明。 根据我的发现,我做了以下事情:

  • 运行 npm 登录
  • 跑了 npm token create --read-only

然后这给了我一个看起来像这样的令牌: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

然后,我在我的函数目录中创建了一个名为 .npmrc 的文件,并将//registry.npmjs.org/:_authToken=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX放入其中。

此外,我看到错误消息是尝试使用 ssh 来安装我的私人仓库 package,我没有设置 ssh 而是使用 https,因此我将我的 package 文件更改为git+https://github.com/accounts-name/repo#commit-num以便它使用 HTTPS。

但是,我仍然收到相同的错误消息。 我错过了什么? 以上是我从大量谷歌搜索中串起来的。

看来您在尝试使其工作时进行了太多不同的更改,所以让我们逐步完成整个过程 go。

  1. 查看你的npm模块的package.json并发布:

    • 删除“私有”属性或将其设置为false ,因为 npm 中的私有模块永远不会发布。 这并不明显,但确实如此。
    • 下一步是对 package 应用限制访问。为此,请在package.json文件中添加此类属性
     "publishConfig": { "access": "restricted" },
    • 请确保您用于发布的npm帐户支持私有包。
    • 现在打开 package 根目录中的终端,键入npm login ,然后登录 npm。检查您是否将正确的版本放入package.json
    • 运行npm publish package 应该会在几秒钟内发布。 不用担心,由于publishConfig属性,没有人可以访问它。
  2. 现在是时候允许在您的项目中安装 package

    • Go 到工程目录下,打开package.json文件
    • 检查dependencies项列表中是否包含 package 的名称和版本
    • 打开浏览器,导航至https://npmjs.com ,登录您的帐户,导航至您帐户的设置页面并打开tokens选项卡
    • 创建新令牌并复制它
    • 现在再次 go 到您的项目目录,与package.json文件所在的同一级别(这很重要!)并在那里创建.npmrc文件。
    • 将这样的字符串放在.npmrc文件中:
     //registry.npmjs.org/:_authToken=TOKEN_HERE

    你完成了!

  3. 使用远程 CI/CD 服务进行部署

    • 最简单的方法是不将.npmrc添加到.gitignore中。 在这种情况下,文件将始终在存储库中,因此npm install将在克隆项目的任何机器上顺利运行
    • 如果你不想在存储库中有令牌字符串,你可以将它移动到你的 CI/CD 服务的环境变量,然后将 link.npmrc 文件移动到该变量。 例如,您可以将生成的令牌放入NPM_TOKEN env 变量(只是来自 npmjs 的令牌,而不是来自 .npmrc 的整个字符串!)然后按以下方式更改.npmrc文件://registry.npmjs.org/: //registry.npmjs.org/:_authToken=${NPM_TOKEN}

因此,通过这些步骤,您应该能够毫无问题地安装受限软件包。 祝你好运!

如果您尝试使用 firebase 从 CI 部署您的功能,您的.npmrc文件如下所示。

@acmecorp:registry=https://npm.pkg.github.com/

//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}

即使您设置了环境变量,您也会遇到问题。

Build failed: Error: Failed to replace env in config: ${NPM_REGISTRY_TOKEN}

Firebase 出于某种原因需要访问该私人仓库。 但是环境变量没有发送到 firebase。

我实施的解决方案是在 CI 管道的每次运行中替换 .npmrc 文件中的${NPM_REGISTRY_TOKEN}

sed -i.bak "s/\${NPM_REGISTRY_TOKEN}/${NPM_REGISTRY_TOKEN}/g" .npmrc

如果您使用 Yarn ,这会中断。 我花了一段时间才在 firebase cli 预部署步骤中找到指向 npm 安装的线程。 如果没有 package-lock.json 并且你只使用纱线,这将会中断。 删除 yarn.lock 并使用 npm 安装以解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM