当我尝试通过 GCP 部署命令托管 Node.js 应用程序时,它不起作用。错误 : Cannot find module 'express'

标签 node.js typescript express npm google-cloud-platform

我的 NodeJS 应用程序是使用 TypeScript 编写的,并且基于 Express 框架。我想使用 gcloud app deploy 命令将其托管在 GCP 云中。 因此,首先,我将我的 TS 源代码构建为 JavaScript - 这是正确的做法吗?

然后从 build(带有 JS 源代码)文件夹我尝试运行 npm start 命令并且它成功运行并且我也能够检查它带预览:

enter image description here .

效果很好。到目前为止,一切都很好。

然后我从 build 文件夹(内置到 JS 源)运行 gcloud app deploy,在部署期间我没有看到任何错误。

但之后,每当我尝试访问已部署的应用程序时,每次请求都会收到 500 错误。我查看了日志,发现下一个错误:

Error: Cannot find module 'express'

似乎是什么问题?

我尝试了 build 文件夹中的下一个命令:

    npm install
    npm install express --save
    npm install -g express
    sudo apt-get install node-express

对我来说没有任何用处。

这是我的 package.json 文件:

{
  "name": "full-node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "tsc",
    "dev": "node -r ts-node/register ./src/server.ts",
    "debug": "ts-node --inspect ./src/server.ts",
    "start": "node build/server.js",
    "prod": "npm run build && npm run start"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "ts-node": "^7.0.1",
    "typescript": "^3.0.1"
  },
  "dependencies": {
    "@types/lodash": "^4.14.116",
    "body-parser": "^1.18.3",
    "connect": "^3.6.6",
    "cors": "^2.8.4",
    "crypto": "^1.0.1",
    "express": "^4.16.3",
    "firebase-admin": "^6.0.0",
    "lodash": "^4.17.10"
  }
}

知道我错过了什么吗?这是将使用 TypeScript 编写的应用程序部署到 GCP 云的正确方法吗?

app.yaml:

# [START app_yaml]
runtime: nodejs8
# [END app_yaml]

最佳答案

由于您是从 build 文件夹中运行 gcloud app deploy 的,因此 package.json 可能未部署,因为 npm install 是由 App Engine 首先运行的,因此不可能缺少 express。您可以转到 gcp 控制台并在App Engine 查看版本,然后在诊断下您可以查看源代码(实际部署到 App Engine 的文件)。请记住,这仅适用于标准版本,而不适用于 Flex。我可以从您的应用程序中看到。 yaml 你正在使用标准。如果缺少某些文件,则转到你的应用程序根目录,在你的 .gcloudignore 文件中,你可以忽略你不想部署的文件/文件夹。然后从根目录中运行 gcloud app deploy你的项目

关于当我尝试通过 GCP 部署命令托管 Node.js 应用程序时,它不起作用。错误 : Cannot find module 'express' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248181/

相关文章:

node.js - 标题未定义...node.js、express、jade、twitter bootstrap

javascript - Node.js 1gb csv 文件上传 - 错误 : Request aborted

javascript - 如何对代码进行后续处理以加入两个以上的表?

node.js - 如何从 NodeJS 中的特定子集获取所有 Redis 哈希值?

typescript - 使用 ConstructorParameters 扩展泛型类?

typescript - 如何在 dart 项目中使用用 typescript 编写的 angular 2 组件

javascript - Rxjs 共享可观察的订阅

javascript - MongoDB/Mongoose中索引号有何意义

node.js - 当没有任何更改时,Sequelize 关联/模型突然无法识别,模糊错误无法读取未定义的属性 'field'

node.js - 服务器渲染 react-router v4 passthrough if 404