Esecuzione di un passaggio di compilazione personalizzato

Per impostazione predefinita, il runtime node.js eseguirà npm run build se uno script build viene rilevato in package.json file. Se hai bisogno di un controllo aggiuntivo sulla build passaggi prima di avviare l'applicazione, puoi fornire una build personalizzata passaggio. Puoi eseguire passaggi di build personalizzati aggiungendo gcp-build nel tuo package.json file.

Per impedire alla build di eseguire lo script npm run build, devi:

  • Aggiungi 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.
  • Aggiungi la variabile di ambiente di compilazione GOOGLE_NODE_RUN_SCRIPTS con un valore vuoto nel file app.yaml.

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
Per maggiori dettagli sulla specifica delle variabili di ambiente di build, consulta Sezione build_env_variables nel file app.yaml.

Quando viene eseguito questo script, le dipendenze in dependencies e devDependencies campi del file package.json sono disponibili. Dopo aver eseguito il passaggio di compilazione 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 ulteriori informazioni su come configurare il runtime per i passaggi di compilazione personalizzati, consulta Eseguire i passaggi di compilazione personalizzati durante il deployment per i buildpack Node.js.

Esempio

Uno script di compilazione personalizzato può essere utilizzato per attività di preelaborazione, come la preelaborazione del CSS, la minimizzazione del codice 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. Nota lo 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 i file durante il passaggio di build personalizzato, App Engine non pubblicare questi file statici direttamente dalla tua app utilizzando il static_dir oppure static_files elementi definiti nel file app.yaml. App Engine carica invece i file statici nell'infrastruttura di pubblicazione nell'ambiente standard prima di eseguire il passaggio di build personalizzato. Qualsiasi richiesta ai file generati o copiati durante il passaggio di compilazione personalizzato genera un errore HTTP 404 NOT FOUND.