【问题标题】:Google App Engine Standard Node JS how to run build script?Google App Engine 标准节点 JS 如何运行构建脚本?
【发布时间】:2018-07-02 12:54:00
【问题描述】:

节点的 GAE 标准是否支持构建脚本的方式?我尝试在 package.json 中使用 postinstall,但没有成功。

我的代码库在子目录中有带有package.json 的子目录。在我的根package.json 中有

scripts: { 
    postinstall: cd vendor && npm install 
    ....
}

但是我没有看到安装任何供应商软件包,所以我倾向于相信在 GAE 节点标准上不会触发后安装。

有没有什么方法可以让我安装子目录依赖项,而不必将我所有的 vendor/package.json 依赖项复制并粘贴到根目录?

注意:我也尝试在 package.json 脚本中添加“安装”,但似乎也没有触发。

【问题讨论】:

  • 如果我没记错的话,您必须将它们添加到您的应用程序的其他配置文件中的 packages.json 文件中。 documentation 里有一篇关于这个的文章。

标签: node.js google-app-engine


【解决方案1】:

在 GAE 标准中,依赖项的安装是自动管理的。您应该将它们添加到您的package.json

正如Google documentation 提到的那样:

部署应用时,Node.js 运行时会使用 npm install 命令自动安装 package.json 文件中声明的所有依赖项。

{
  "dependencies": {
    "lodash": "^4.0.1"
  }
}

将在应用部署期间通过以下方式完成安装:

gcloud app deploy

【讨论】:

  • 是的,我在文档中看到了这一点,但它没有谈论构建脚本。如果我有一个运行命令的postinstall 脚本怎么办?
  • 所以你可能应该考虑选择灵活的环境。您需要进行什么样的后期安装?
  • 我有一个带有 package.json 的供应商文件夹。安装后执行cd vendor && npm install。我需要这个供应商文件夹,因为我的服务器提供来自该 vendor/node_modules 文件夹的静态文件。这使我可以在不暴露整个 node_modules 文件夹的情况下提供静态 node_modules。
  • 在 GAE 标准中,nodejs 在沙箱中执行。如果您想使用它,您需要接受一些限制并调整您的解决方案。静态文件应符合 GAE 标准规则。 (cloud.google.com/appengine/docs/standard/nodejs/…)
【解决方案2】:

要添加构建步骤,请运行以下命令:

gcloud beta app gen-config --custom

这将生成默认的 dockerfile 和运行的配置。在您的 .dockerfile 中,添加您的构建步骤:

RUN npm run build --unsafe-perm || \
  ((if [ -f npm-debug.log ]; then \
      cat npm-debug.log; \
    fi) && false)

【讨论】:

【解决方案3】:

"prestart": "if [ !-d build ]; then npm run build; fi",

“-d build”这里是构建过程生成的文件夹,将其替换为您实际使用的任何内容。

【讨论】:

    【解决方案4】:

    不确定这是否适用于您的情况,但似乎 GAE 标准已将功能添加到 run a custom build step

    但它确实表明:

    执行您的自定义构建步骤后,App Engine 通过仅安装在您的 package.json 文件的依赖项字段中声明的生产 dependencies 来删除并重新生成 node_modules 文件夹。

    可能由于node_modules 位于您的vendor/ 目录中,GAE 可能无法检测并删除它们,从而实现您的目标。这是一个预安装步骤,与脚本中指定的postinstall 不同。不确定是否重要。

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2016-03-25
      • 2022-06-13
      • 1970-01-01
      相关资源
      最近更新 更多