TypeScript 项目无法部署到针对 Node 12 或 14 的 App Engine,但适用于 Node 10

TypeScript project failing to deploy to App Engine targeting Node 12 or 14, but works with Node 10

我有一个 TypeScript 项目已经多次部署到 Google App Engine,标准环境,运行 节点 10 没有任何问题。但是,当我尝试更新 App Engine 项目时到节点 12 或 14(通过编辑 package.json 中的 engines.node 值和 app.yaml 中的 runtime 值),部署失败,将以下内容打印到控制台:

> ####@1.0.1 prepare /workspace
> npm run gcp-build


> ####@1.0.1 gcp-build /workspace
> tsc -p .

sh: 1: tsc: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! ####@1.0.1 gcp-build: `tsc -p .`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the ####@1.0.1 gcp-build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

根据以下文档,App Engine 应该在 运行 gcp-build 脚本(已被正如预期的那样,在将 Node 版本设置为 10 进行部署时。

https://cloud.google.com/appengine/docs/standard/nodejs/running-custom-build-step

我找不到任何关于当以 Node 12 或 14 而不是 Node 10 为目标时此 App Engine 部署行为发生变化的文档。是否缺少某些配置?还是 Google 不再在 运行 gcp-build 脚本之前安装 devDependencies

这是我的 package.jsondevDependencies 部分(那里有 TypeScript):

    "devDependencies": {
        "@google-cloud/nodejs-repo-tools": "^3.3.0",
        "@types/cors": "^2.8.12",
        "@types/express": "^4.17.13",
        "@types/pg": "^8.6.1",
        "@types/request": "^2.48.7",
        "tsc-watch": "^4.4.0",
        "tslint": "^6.1.3",
        "typescript": "^4.3.5"
    },

我遇到了完全相同的问题,只是将 typescript 放在依赖项中,而不是 devDependencies。

在那之后它起作用了,但不能保证它是由于这个改变造成的(因为我没有证据证明)。