Benutzerdefinierten Build-Schritt ausführen

Standardmäßig führt die Node.js-Laufzeit npm run build aus, wenn in package.json ein build-Script erkannt wird. Wenn Sie vor dem Start Ihrer Anwendung zusätzliche Kontrolle über die Build-Schritte benötigen, können Sie einen benutzerdefinierten Build-Schritt bereitstellen. Sie können benutzerdefinierte Build-Schritte ausführen, indem Sie gcp-build in die Datei package.json einfügen.

Wenn Sie verhindern möchten, dass Ihr Build das Script npm run build ausführt, haben Sie folgende Möglichkeiten:

  • Fügen Sie ein gcp-build-Script mit einem leeren Wert in Ihre package.json-Datei ein: "gcp-build":"". Weitere Informationen zum Konfigurieren von package.json finden Sie unter Node.js-Buildpacks-Konfigurationen.
  • Fügen Sie die Build-Umgebungsvariable GOOGLE_NODE_RUN_SCRIPTS mit einem leeren Wert in die Datei app.yaml ein.

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
Weitere Informationen zum Angeben von Build-Umgebungsvariablen finden Sie im Abschnitt build_env_variables in der Datei app.yaml.

Wenn dieses Skript ausgeführt wird, sind die Abhängigkeiten in den Feldern dependencies und devDependencies der package.json-Datei verfügbar. Nach dem Ausführen des benutzerdefinierten Build-Schritts wird der Ordner node_modules von App Engine entfernt und neu generiert. Dies geschieht, indem genau die Produktionsabhängigkeiten installiert werden, die im Feld dependencies der package.json-Datei deklariert sind.

Weitere Informationen zum Konfigurieren der Laufzeit für benutzerdefinierte Build-Schritte finden Sie unter Benutzerdefinierte Build-Schritte während der Bereitstellung ausführen für Node.js-Buildpacks.

Beispiel

Ein benutzerdefiniertes Build-Skript kann für Vorverarbeitungsaufgaben wie die Vorverarbeitung von CSS, das Komprimieren von clientseitigem JavaScript oder die Ausführung von Tools wie webpack oder gulp verwendet werden.

Soll beispielsweise TypeScript in JavaScript kompiliert werden, kann Ihre package.json-Datei so aussehen. Beachten Sie das Skript 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": "16.x.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": "^6.0.0",
    "express": "^4.16.3"
  },
  "devDependencies": {
    "@types/express": "^4.17.17",
    "@types/node": "^18.13.0",
    "c8": "^8.0.0",
    "chai": "^4.3.7",
    "gts": "^5.0.0",
    "mocha": "^10.2.0",
    "typescript": "^5.0.0",
    "wait-port": "^1.0.0"
  }
}

Statische Dateien bereitstellen

Wenn Sie während des benutzerdefinierten Build-Schrittes Dateien generieren oder kopieren, stellt App Engine diese statischen Dateien nicht direkt über die Anwendung bereit, wobei entweder die Elemente static_dir oderstatic_files verwendet werden, die in der Datei app.yaml definiert sind. Stattdessen lädt App Engine die statischen Dateien in die Bereitstellungsinfrastruktur in der Standardumgebung hoch, bevor der benutzerdefinierte Build-Schritt ausgeführt wird. Jede Anfrage an die Dateien, die während des benutzerdefinierten Build-Schritts generiert oder kopiert werden, führt zum HTTP-Fehler 404 NOT FOUND.