代码之家  ›  专栏  ›  技术社区  ›  Lin Du Correcter

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

  •  0
  • Lin Du Correcter  · 技术社区  · 6 年前

    GAE 标准环境。

    我的想法和工作流程如下:

    GAE公司 服务到GCP=>从 .ts .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 部署阶段?

    如果答案是肯定的。如何解决此错误?谢谢。

    我可以通过以下工作流成功部署和运行我的应用程序:

    从生成源代码 .js公司 ,生成 ./dist 目录=>运行 gcloud app deploy 将上载 /距离 GAE公司 容器=>运行 npm start

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

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Anthony Metzidis    6 年前

    这需要两个步骤

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

    创建然后NPM构建步骤映像

    build image in a fork 使用node alpine

    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"