【发布时间】:2021-11-20 10:20:11
【问题描述】:
我正在尝试部署 GCloud App Engine 灵活服务。我有一个 yaml 文件,其中指定了 Node.js 运行时和 env。
runtime: nodejs
env: flex
正如文档所说“您可以使用引擎字段在应用程序的 package.json 文件中指定不同的 Node.js 版本。”,我还在package.json 中添加了以下内容:
"name": "@bindr/dev",
"version": "1.0.0",
"engines": {
"node": ">=14.0.0"
},
但是,当我运行 gcloud app deploy 时,我收到以下错误:
error @bindr/dev@1.0.0: The engine "node" is incompatible with this module. Expected version ">=14.0.0". Got "12.19.0"
部署过程似乎没有考虑engines 属性,因为即使我指定了无效版本(例如>=18.0.0)它仍然没有抱怨,只有yarn install 失败。如何让构建过程使用指定的 Node 版本?
我发现我可以在 cloudbuild.yaml 中为构建的某些步骤指定 Node 的版本,如下所示:
steps:
- name: node:node-14.10.0
args: ['predeploy.js', 'content-server']
- name: 'gcr.io/cloud-builders/yarn:node-14.17.1'
args: ['install']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy']
timeout: '900s'
在此过程中,yarn install 步骤成功,但在尝试安装依赖项时gcloud app deploy 步骤仍然失败(我找不到如何将节点版本指定为gcr.io/cloud-builders/gcloud,它没有好像是这样的标签)。
我还检查了相同的12.19.0 版本正在生产实例上运行,因此不仅构建环境具有旧版本。
我做错了什么?
【问题讨论】:
-
尝试使用
yarn install --ignore-engines进行部署,如果可行,请告诉我 -
它可能会构建,但我检查了实例上的节点版本是
12.19.0,并且,例如最新的node-fetch需要>=12.20.0。我不会在生产中使用 Node 版本,该包不正式支持该版本(即使它似乎可以工作)。 -
为什么是 -1 呢?这是一个合法的问题,我详细说明了许多我已经发现的事情。我应该在其他地方发帖吗?
-
您可以尝试从
package.jsonEngine 部分删除节点版本规范吗?有用吗? -
我试过了。它构建成功,但是当我 SSH 进入实例并检查节点版本时仍然显示
v12.19.0。
标签: node.js google-app-engine google-cloud-platform google-cloud-build app-engine-flexible