Exécuter une étape de compilation personnalisée

Par défaut, l'environnement d'exécution Node.js exécute npm run build si un script build est détecté dans le fichier package.json. Si vous avez besoin d'exercer un contrôle supplémentaire sur vos étapes de compilation avant de démarrer votre application, vous pouvez fournir une étape de compilation personnalisée. Les étapes de compilation personnalisées peuvent être exécutées en ajoutant gcp-build dans le fichier package.json.

Pour empêcher votre compilation d'exécuter le script npm run build, vous devez effectuer l'une des opérations suivantes :

  • Ajoutez un script gcp-build avec une valeur vide dans votre fichier package.json : "gcp-build":"". Pour en savoir plus sur la configuration de package.json, consultez la page Configurations des buildpacks Node.js.
  • Ajoutez la variable d'environnement de compilation GOOGLE_NODE_RUN_SCRIPTS avec une valeur vide dans votre fichier app.yaml.

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
Pour en savoir plus sur la spécification des variables d'environnement de compilation, consultez la section build_env_variables du fichier app.yaml.

Lorsque ce script est exécuté, les dépendances des champs dependencies et devDependencies du fichier package.json sont disponibles. Une fois que vous avez exécuté l'étape de compilation personnalisée, App Engine supprime et génère à nouveau le dossier node_modules en n'installant que les dépendances de l'environnement de production déclarées dans le champ dependencies du fichier package.json.

Pour en savoir plus sur la configuration de l'environnement d'exécution pour les étapes de compilation personnalisées, consultez la page Exécuter des étapes de compilation personnalisées lors du déploiement pour les buildpacks Node.js.

Exemple

Un script de compilation personnalisé peut être employé pour des tâches de prétraitement, telles que le prétraitement des fichiers CSS, la minimisation des fichiers JavaScript côté client, ou l'exécution d'outils tels que webpack ou gulp.

Par exemple, si vous souhaitez compiler TypeScript en JavaScript, le fichier package.json peut ressembler à ce qui suit. Notez la présence du script 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"
  }
}

Diffuser des fichiers statiques

Lorsque vous générez ou copiez des fichiers pendant l'étape de compilation personnalisée, App Engine ne diffuse pas ces fichiers statiques directement depuis votre application à l'aide des éléments static_dir ou static_files définis dans le fichier app.yaml. À la place, App Engine importe les fichiers statiques dans l'infrastructure de diffusion de l'environnement standard avant d'exécuter l'étape de compilation personnalisée. Toute requête adressée aux fichiers générés ou copiés lors de l'étape de compilation personnalisée génère une erreur HTTP 404 NOT FOUND.