在GAE服务部署阶段如何使用webpack构建我的源代码?

时间:2018-11-12 08:56:04

标签: google-app-engine

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以启动应用程序。

因此,这两个工作流程之间的唯一区别是何时构建源代码。

在本地构建源代码或在云构建阶段(在启动应用程序之前)构建源代码

1 个答案:

答案 0 :(得分:0)

这需要两个步骤

  1. 构建贡献的npm构建步骤图像
  2. 使用 npm构建步骤以运行npm命令

然后创建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"