Esecuzione di un passaggio di compilazione personalizzato

Per impostazione predefinita, il runtime node.js eseguirà npm run build se viene rilevato uno script build nel file package.json. Se hai bisogno di un maggiore controllo sui passaggi di build prima di avviare l'applicazione, puoi fornire un passaggio di build personalizzato. I passaggi di build personalizzati possono essere eseguiti aggiungendo gcp-build nel file package.json.

Per impedire l'esecuzione dello script npm run build nella build, devi:

  • Aggiungere uno script gcp-build con un valore vuoto nel file package.json: "gcp-build":"". Per informazioni dettagliate sulla configurazione di package.json, consulta Configurazioni dei buildpack Node.js.
  • Aggiungere la GOOGLE_NODE_RUN_SCRIPTS variabile di ambiente di build con un valore vuoto nel file app.yaml.

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
Per informazioni dettagliate sulla specifica delle variabili di ambiente di build, consulta la sezione build_env_variables nel file app.yaml.

Quando viene eseguito questo script, sono disponibili le dipendenze nei campi dependencies e devDependencies del file package.json. Dopo l'esecuzione del passaggio di build personalizzato, App Engine rimuove e rigenera la cartella node_modules installando solo le dipendenze di produzione dichiarate nel campo dependencies del file package.json.

Per saperne di più su come configurare il runtime per i passaggi di build personalizzati, consulta Esecuzione di passaggi di build personalizzati durante il deployment per i buildpack Node.js.

Esempio

Uno script di build personalizzato può essere utilizzato per attività di pre-elaborazione, come la pre-elaborazione di CSS, la minimizzazione di JavaScript lato client o l'esecuzione di strumenti come webpack o gulp.

Ad esempio, per compilare TypeScript in JavaScript, il file package.json potrebbe avere il seguente aspetto. Prendi nota dello 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": "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"
  }
}

Gestione dei file statici

Quando generi o copi file durante il passaggio di build personalizzato, App Engine non gestisce questi file statici direttamente dalla tua app utilizzando gli elementi static_diro static_filesdefiniti nel file app.yaml. Prima di eseguire il passaggio di build personalizzato, App Engine carica i file statici nell'infrastruttura di gestione nell'ambiente standard. Qualsiasi richiesta ai file generati o copiati durante il passaggio di build personalizzato genera un errore HTTP 404 NOT FOUND.