[英]Installing private GitHub npm package in Firebase Cloud Functions
[英]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 )
但是,我无法在任何地方找到有关如何执行此操作的正确说明。 根据我的发现,我做了以下事情:
然后这给了我一个看起来像这样的令牌: 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。
查看你的npm模块的package.json并发布:
false
,因为 npm 中的私有模块永远不会发布。 这并不明显,但确实如此。package.json
文件中添加此类属性: "publishConfig": { "access": "restricted" },
npm
帐户支持私有包。npm login
,然后登录 npm。检查您是否将正确的版本放入package.json
。npm publish
。 package 应该会在几秒钟内发布。 不用担心,由于publishConfig
属性,没有人可以访问它。现在是时候允许在您的项目中安装 package
package.json
文件dependencies
项列表中是否包含 package 的名称和版本tokens
选项卡package.json
文件所在的同一级别(这很重要!)并在那里创建.npmrc
文件。.npmrc
文件中: //registry.npmjs.org/:_authToken=TOKEN_HERE
你完成了!
使用远程 CI/CD 服务进行部署
.npmrc
添加到.gitignore
中。 在这种情况下,文件将始终在存储库中,因此npm install
将在克隆项目的任何机器上顺利运行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.