Executar um passo de compilação personalizado

Por predefinição, o tempo de execução do node.js executa npm run build se for detetado um script build no ficheiro package.json. Se precisar de controlo adicional sobre os passos de compilação antes de iniciar a aplicação, pode fornecer um passo de compilação personalizado. Pode executar passos de compilação personalizados adicionando gcp-build ao seu ficheiro package.json.

Para impedir que a compilação execute o script npm run build, tem de:

  • Adicione um script gcp-build com um valor vazio no seu ficheiro package.json: "gcp-build":"". Para ver detalhes sobre a configuração do package.json, consulte as configurações dos buildpacks do Node.js.
  • Adicione a variável de ambiente GOOGLE_NODE_RUN_SCRIPTS com um valor vazio no seu ficheiro app.yaml.

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
Para ver detalhes sobre a especificação de variáveis do ambiente de compilação, consulte a secção build_env_variables no ficheiro app.yaml.

Quando este script é executado, as dependências nos campos dependencies e devDependencies do seu ficheiro package.json estão disponíveis. Após a execução do passo de compilação personalizado, o App Engine remove e volta a gerar a pasta node_modules instalando apenas as dependências de produção declaradas no campo dependencies do ficheiro package.json.

Para mais informações sobre como configurar o tempo de execução para passos de compilação personalizados, consulte o artigo Executar passos de compilação personalizados durante a implementação para buildpacks do Node.js.

Exemplo

Pode usar um script de compilação personalizado para tarefas de pré-processamento, como pré-processar CSS, reduzir o JavaScript do lado do cliente ou executar ferramentas, como webpack ou gulp.

Por exemplo, para compilar TypeScript para JavaScript, o ficheiro package.json pode ter o seguinte aspeto. Tenha em atenção o 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"
  }
}

Publicar ficheiros estáticos

Quando gera ou copia ficheiros durante o passo de compilação personalizada, o App Engine não disponibiliza estes ficheiros estáticos diretamente a partir da sua app através dos elementos static_dir ou static_files definidos no ficheiro app.yaml. Em alternativa, o App Engine carrega os ficheiros estáticos para a infraestrutura de publicação no ambiente padrão antes de executar o passo de compilação personalizado. Qualquer pedido aos ficheiros gerados ou copiados durante o passo de compilação personalizado resulta num erro HTTP.404 NOT FOUND