为 Google App Engine Standard 使用私人 npm 注册表

Use private npm registry for Google App Engine Standard

对于所有其他 Whosebug 问题,似乎人们在询问私有 npm git 存储库或不同的技术堆栈。我很确定我可以在 GAE Flexible 中使用私有 npm 注册表,但我想知道标准版本是否可行?

GAE standard docs 看来,这似乎是不可能的。还有其他人知道吗?

Google Cloud Functions 允许您通过在 .npmrc 文件中为 npm 注册表提供凭据来访问私有 NPM 模块,如文档的 Using private modules 部分所述。

但是,这对于 App Engine Standard 是不可能的,并且已经为其创建了一个功能请求,您可以通过 this link.

进行关注

我建议将此请求标记为受影响,并发表评论说明这​​对您有何影响,因为这会增加请求的可见度。

Google 将此功能请求标记为“不会修复,预期行为”,但有一个解决方法。

据推测,您可以在 CI/CD 管道的构建阶段访问环境变量。通过让您的构建脚本使用环境变量的值覆盖 .npmrc 文件来开始该阶段(注意:value,而不是变量名称)。 .npmrc 文件(及其中的令牌)将可供 CI/CD 管道的其余部分使用。

例如:

  - name: Install and build
    env:
      NPM_AUTH_TOKEN: ${{ secrets.PRIVATE_REPO_PACKAGE_READ_TOKEN }}
    run: |
      # Remove these 'echo' statements after we migrate off of Google App Engine.
      # See replies 14 and 18 here: https://issuetracker.google.com/issues/143810864?pli=1
      echo "//npm.pkg.github.com/:_authToken=${NPM_AUTH_TOKEN}" > .npmrc
      echo "@organizationname:registry=https://npm.pkg.github.com" >> .npmrc
      echo "always-auth=true" >> .npmrc
      npm install
      npm run compile
      npm run secrets:get ${{ secrets.YOUR_GCP_PROJECT_ID }}

向在 Issure Tracker 线程中回复 14 和 18 的匿名英雄们致敬 - https://issuetracker.google.com/issues/143810864?pli=1

如果您的项目代码中有一个 .npmrc 文件,您最好在顶部添加注释,说明它将在 CI/CD 管道期间被覆盖。否则,墨菲定律规定您(或队友)将检查对该 .npmrc 文件的更改,然后浪费无限量的时间试图弄清楚为什么该更改在部署期间无效。