執行自訂建構步驟

根據預設,如果系統在 package.json 檔案中偵測到 build 指令碼,node.js 執行階段就會執行 npm run build。如果您需要在啟動應用程式之前,對建構步驟進行額外控制,可以提供自訂建構步驟。如要執行自訂建構步驟,請在 package.json 檔案中新增 gcp-build

如要防止建構作業執行 npm run build 指令碼,請採取下列任一做法:

  • package.json 檔案中新增值為空白的 gcp-build 指令碼: "gcp-build":""。如要瞭解如何設定 package.json,請參閱 Node.js 建構套件設定
  • app.yaml 檔案中,新增值為空白的 GOOGLE_NODE_RUN_SCRIPTS 建構環境變數。

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
如要進一步瞭解如何指定建構環境變數,請參閱 app.yaml 檔案中的 build_env_variables 節。

執行此指令碼時,package.json 檔案中的 dependenciesdevDependencies 欄位的依附元件為可用狀態。 執行自訂建構步驟後,App Engine 只會安裝 package.json 檔案中 dependencies 欄位宣告的實際依附元件,以移除並重新產生 node_modules 資料夾。

如要進一步瞭解如何為自訂建構步驟設定執行階段,請參閱 Node.js 建構套件的「在部署期間執行自訂建構步驟」一文。

範例

自訂建構指令碼可用於預先處理工作,如預先處理 CSS、壓縮客戶端的 JavaScript,或是執行 webpackgulp 等工具。

舉例來說,如要將 TypeScript 編譯為 JavaScript,您的 package.json 檔案看起來可能如下所示:請注意 gcp-build 指令碼:

{
  "name": "appengine-typescript",
  "description": "An example TypeScript app running on Google App Engine.",
  "version": "0.0.1",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "engines": {
    "node": "20.x"
  },
  "scripts": {
    "prepare": "npm run gcp-build",
    "pretest": "npm run gcp-build",
    "test": "c8 mocha -p -j 2 test/*.test.js --exit",
    "lint": "gts lint",
    "start": "node ./index.js",
    "deploy": "gcloud app deploy",
    "clean": "gts clean",
    "compile": "tsc -p .",
    "fix": "gts fix",
    "build": "tsc -p .",
    "gcp-build": "tsc -p ."
  },
  "dependencies": {
    "@typescript-eslint/parser": "^8.0.0",
    "express": "^4.16.3"
  },
  "devDependencies": {
    "@types/express": "^4.17.17",
    "@types/node": "^20.0.0",
    "c8": "^10.0.0",
    "chai": "^4.5.0",
    "gts": "^5.0.0",
    "mocha": "^10.2.0",
    "typescript": "^5.0.0",
    "wait-port": "^1.0.0"
  }
}

提供靜態檔案

在自訂建構步驟中產生或複製檔案時,App Engine 不會使用 app.yaml 檔案中定義的 static_dirstatic_files 元素,直接從應用程式提供這些靜態檔案。App Engine 會先將靜態檔案上傳至標準環境的服務基礎架構,再執行自訂建構步驟。如果要求在自訂建構步驟中產生或複製的檔案,會導致 404 NOT FOUND HTTP 錯誤。