我的 NodeJS 应用程序是使用 TypeScript 编写的,并且基于 Express 框架。我想使用 gcloud app deploy
命令将其托管在 GCP 云中。
因此,首先,我将我的 TS 源代码构建为 JavaScript - 这是正确的做法吗?
然后从 build
(带有 JS 源代码)文件夹我尝试运行 npm start
命令并且它成功运行并且我也能够检查它带预览:
效果很好。到目前为止,一切都很好。
然后我从 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/