Ejecutar un paso de compilación personalizado

De forma predeterminada, el tiempo de ejecución de Node.js ejecutará npm run build si se detecta una secuencia de comandos build en el archivo package.json. Si necesitas tener más control sobre los pasos de compilación antes de iniciar la aplicación, puedes proporcionar un paso de compilación personalizado. Para ejecutar pasos de compilación personalizados, añade gcp-build en el archivo package.json.

Para evitar que tu compilación ejecute la secuencia de comandos npm run build, debes hacer lo siguiente:

  • Añade una secuencia de comandos gcp-build con un valor vacío en tu archivo package.json: "gcp-build":"". Para obtener información sobre cómo configurar package.json, consulta Configuraciones de paquetes de compilación de Node.js.
  • Añade la variable de entorno de compilación GOOGLE_NODE_RUN_SCRIPTS con un valor vacío en el archivo app.yaml.

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
Para obtener información sobre cómo especificar variables de entorno de compilación, consulta la sección build_env_variables del archivo app.yaml.

Cuando se ejecuta esta secuencia de comandos, las dependencias de los campos dependencies y devDependencies de tu archivo package.json están disponibles. Después de ejecutar el paso de compilación personalizado, App Engine elimina y vuelve a generar la carpeta node_modules instalando solo las dependencias de producción declaradas en el campo dependencies del archivo package.json.

Para obtener más información sobre cómo configurar el tiempo de ejecución de los pasos de compilación personalizados, consulta Ejecutar pasos de compilación personalizados durante la implementación para los buildpacks de Node.js.

Ejemplo

Se puede usar una secuencia de comandos de compilación personalizada para tareas de preprocesamiento, como preprocesar CSS, minificar JavaScript del lado del cliente o ejecutar herramientas como webpack o gulp.

Por ejemplo, para compilar TypeScript en JavaScript, tu archivo package.json podría tener un aspecto similar al siguiente. Ten en cuenta la secuencia de comandos 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"
  }
}

Suministrar archivos estáticos

Cuando generas o copias archivos durante el paso de compilación personalizada, App Engine no sirve estos archivos estáticos directamente desde tu aplicación mediante los elementos static_dir u static_files definidos en el archivo app.yaml. En su lugar, App Engine sube los archivos estáticos a la infraestructura de servicio del entorno estándar antes de ejecutar el paso de compilación personalizado. Cualquier solicitud a los archivos generados o copiados durante el paso de compilación personalizada da como resultado un error HTTP 404 NOT FOUND.