執行自訂建構步驟

根據預設,如果在 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 錯誤。