我的NodeJS应用程序是用TypeScript编写的,是基于Express框架的。我想用gcloud app deploy命令在GCP云中托管它。因此,首先,我将我的TS源构建为JavaScript -is,这是正确的方法吗?
然后,在build (使用JS源代码)文件夹中,我尝试运行npm start命令,并且运行成功,我还可以使用Preview检查它:

。
效果很好。到现在为止还好。
然后,我从gcloud app deploy文件夹(内置到JS源代码)运行build,在部署过程中没有看到任何错误。
但是之后,每当我试图访问部署的应用程序时,每次请求都会收到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]发布于 2018-09-19 10:32:50
问题很简单。似乎gcloud app deploy使用npm run build & npm run start命令在内部某个地方启动应用程序。要托管Node.Js,首先需要使用tsc命令将其构建为简单的JS。然后在build文件夹中重写package.json文件以使用正确的命令。看看我的start命令:"start": "node build/server.js"。我也在build文件夹中使用它,这意味着gcloud命令正在/build/build/文件夹中搜索。我已经将start命令更改为"start": "node server.js",然后所有操作都很好。
发布于 2018-09-16 09:27:17
由于您正在从构建文件夹中运行gcloud应用程序部署,package.json可能没有被部署,因为npm安装首先由应用程序引擎运行,没有办法missing.you可以转到gcp控制台,然后在app engine下查看版本,然后在诊断之后可以查看源文件(实际上部署到应用程序引擎的文件).keep,记住这仅适用于标准版本,而不是.keep。我可以从您的app.yaml中看到,您正在使用standard.If,然后转到应用根目录,在.gcloudignore文件中,您可以忽略不想要的文件/文件夹。要运行deploy.then,请从项目根目录中部署gcloud应用程序。
https://stackoverflow.com/questions/52248181
复制相似问题