GAE
标准环境。
我的想法和工作流程如下:
将GAE
服务部署到GCP =>从.ts
到.js
编译我的源代码=>启动node.js服务器
这是我的package.json
:
{
"name": "webpack-compile-after-deploy",
"version": "1.0.0",
"description": "",
"main": "./dist/main.js",
"scripts": {
"start": "node ./dist/main.js",
"prestart": "npm run build",
"build": "webpack",
"deploy:dev": "gcloud app deploy ./app.dev.yaml",
"deploy:prod": "gcloud app deploy ./app.prod.yaml"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@types/express": "^4.16.0",
"awesome-typescript-loader": "^5.2.1",
"express": "^4.16.4",
"typescript": "^3.1.6",
"webpack": "^4.25.1",
"webpack-cli": "^3.1.2",
"webpack-node-externals": "^1.7.2"
}
}
我将所有节点模块都放在dependencies
上,因为cloud build
使用npm install --production
命令来安装依赖项。
在将GAE
服务部署到GCP
并尝试访问我的应用程序之后。
stackdriver logs
告诉我这样的错误:
Error: Cannot find module '/srv/dist/main.js'
at Function.Module._resolveFilename (module.js:548:15)
at Function.Module._load (module.js:475:25)
at Function.Module.runMain (module.js:694:10)
at startup (bootstrap_node.js:204:16)
at bootstrap_node.js:625:3
所以我认为npm run build
可能失败了。
在webpack
部署阶段是否可以使用GAE
编译我的源代码?
如果答案为是。我该如何解决这个错误?谢谢。
更新
我可以通过以下工作流程成功部署和运行应用程序:
从.ts
到.js
生成源代码,生成./dist
目录=>运行gcloud app deploy
会将./dist
目录上传到GAE
容器= >运行npm start
以启动应用程序。
因此,这两个工作流程之间的唯一区别是何时构建源代码。
在本地构建源代码或在云构建阶段(在启动应用程序之前)构建源代码
答案 0 :(得分:0)
这需要两个步骤
然后创建NPM构建步骤图片
我已自定义build image in a fork以使用节点高山
git clone git@github.com:tonymet/cloud-builders.git
cd npm
# this will create the npm image gcr.io/$PROJECT_ID/npm:latest
gcloud builds submit .
将构建步骤添加到您的cloudbuild.yaml中,然后手动提交
现在在您的项目中创建一个cloudbuild.yaml,它将执行webpack 步骤:
- name: "gcr.io/$PROJECT_ID/npm:latest"
args: ["run" , "test"]
- name: "gcr.io/cloud-builders/gcloud"
args: ["app", "deploy", "app-complete.yaml"]
timeout: "1600s"