Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure Functions suporta múltiplas opções de compilação para publicar seus aplicativos TypeScript no Azure. Escolha seu método de build com base no ambiente local, dependências do app, requisitos de compilação TypeScript e necessidades de runtime.
Escolhendo um método de construção
| Fator | Compilação local (recomendado) | Compilação remota |
|---|---|---|
| Mais adequado para | Construções complexas, repositórios individuais, ferramentas personalizadas | Projetos simples, implantações rápidas |
| Tamanho do pacote | Maior (inclui node_modules) |
Menor (dependências instaladas no Azure) |
| Compilação TypeScript | Você compila localmente | O Azure compila automaticamente |
| Compatibilidade binária nativa | Você deve corresponder à arquitetura de destino | Gerenciado automaticamente (Linux x64) |
| Risco de tempo limite na compilação | Nenhum (funciona na sua máquina) | É possível para grandes conjuntos de dependências |
| Controle | Completo (qualquer ferramenta de compilação, empacotador, otimizador) | Limitado aos padrões da plataforma |
Para pacotes privados de npm ou registros personalizados, veja Dependências personalizadas.
Empacote seu aplicativo para implantação
Ao implantar seu aplicativo de função TypeScript no Azure, seu pacote de implantação deve atender a estes requisitos:
Saída JavaScript necessária: Azure Functions roda JavaScript, então o TypeScript deve ser compilado antes ou durante a implantação.
Nível da raiz
host.json: verifique se há um únicohost.jsonarquivo na raiz do pacote de implantação e não dentro de nenhuma subpasta.package.jsonmaincampo: O runtime Functions lê esse campo na inicialização para localizar e indexar suas funções. Ele deve apontar para o seu ponto de entrada JavaScript compilado (por exemplo,dist/src/index.js).Excluir arquivos de desenvolvimento: Use um
.funcignorearquivo para excluir arquivos desnecessários da implantação, como neste exemplo:.git/ .vscode/ local.settings.json test/ .env tsconfig.json src/ node_modules/
Também tenha em mente esses trade-offs ao planejar sua implantação:
- O ambiente de compilação deve corresponder à produção: dependências com binários nativos devem ser construídas para a arquitetura Linux x64. A build remota lida com isso automaticamente; para compilação local, considere usar Docker ou um ambiente de build containerizado.
- O tamanho do pacote de implantação afeta o cold start: Grandes conjuntos de dependências aumentam a latência de cold start porque o runtime precisa carregar cada arquivo individualmente. Agrupar seu app em menos arquivos com ferramentas como esbuild ou webpack pode reduzir significativamente o tempo de inicialização.
- A compilação remota tem limites de tempo útil: Se a instalação de dependências ou compilação TypeScript exceder os limites da plataforma, a compilação falha. Use uma compilação local com dependências pré-compiladas para projetos de grande porte.
- A inicialização de módulos tem limites de tempo: Node.js carregamento de módulos e indexação de funções durante a inicialização são limitados por tempo. Reduza importações de nível superior ou use importações dinâmicas sempre que possível.
Construção local
Se você não solicitar explicitamente uma build remota, sua máquina instala dependências e compila o TypeScript. Você então empacota e implanta todo o projeto compilado e as dependências localmente no seu aplicativo de funções.
A compilação local resulta em um upload de pacote maior, mas dá controle total sobre o processo de compilação e garante compatibilidade com seu ambiente de desenvolvimento.
Para projetos TypeScript que usam compilação local:
- Precompile TypeScript: Compile seu código TypeScript localmente antes da implantação.
-
Instalar dependências: Execute
npm installouyarn installpara instalar as dependências localmente. - Verificação de builds: Garanta que seus resultados de build funcionem corretamente no seu ambiente local.
- Implante a saída compilada: Implemente o JavaScript compilado junto com as dependências.
Exemplos de comandos para compilação local:
# Install dependencies
npm install
# Compile TypeScript
npm run build
# or
tsc
# Deploy with local build (no remote compilation)
func azure functionapp publish <APP_NAME> --no-build
Você pode configurar as seguintes ferramentas para usar compilação local:
-
Azure Functions Core Tools: use
func azure functionapp publishcom o--no-buildsinalizador. -
AZ CLI:
az functionapp deployment source config-zip -
Entrega contínua usando o GitHub Actions: defina o
remote-buildparâmetro parafalsepara o plano Flex Consumption ou definascm-do-build-during-deploymenteenable-oryx-buildparafalsepara planos dedicados.
Build remoto
Quando você usa build remota, a plataforma Functions cuida da instalação de pacotes, compilação em TypeScript e garante compatibilidade com o ambiente de execução remoto.
Ao usar build remota, você obtém um pacote de implantação menor porque não precisa incluir node_modules ou compilar arquivos JavaScript.
Quando você implanta projetos TypeScript usando compilação remota:
-
Detecção automática: A plataforma detecta projetos TypeScript pela presença de
tsconfig.json. - Compilação: A plataforma compila arquivos TypeScript usando a configuração TypeScript do seu projeto.
-
Instalação de dependências: a plataforma instala tanto
dependenciesquantodevDependenciesa partir depackage.json, já que pacotes de compilação comotypescriptsão necessários para a compilação. - Otimização: A plataforma inclui apenas os arquivos necessários no pacote final de implantação.
Você pode usar a build remota ao publicar seu aplicativo TypeScript usando estas ferramentas:
-
Azure Functions Core Tools: o
func azure functionapp publishcomando requer a--build-remote=trueflag para habilitar a compilação remota de Node.js apps. -
AZ CLI:
az functionapp deployment source config-ziprequer a--build-remote=trueflag para habilitar a compilação remota para Node.js apps. - Visual Studio Code: o comando Azure Functions: Implantar no Azure... sempre usa um build remoto.
-
Entrega contínua usando o GitHub Actions: a ação Azure/functions-action@v1 usa o build remoto quando o
remote-buildparâmetro é definidotruepara o plano de Consumo Flex ou quandoscm-do-build-during-deploymenteenable-oryx-buildsão definidostruepara planos dedicados.
Para habilitar o build remoto para outros cenários, como entrega contínua com o Azure Pipelines, consulte Habilitando o Build Remoto.
Dependências personalizadas
Azure Functions suporta dependências npm personalizadas e privadas usando registros npm personalizados, pacotes privados ou pacotes locais.
Compilação remota com registro personalizado do npm
Quando seus pacotes privados estiverem disponíveis em um registro npm personalizado, você pode solicitar uma build remota após configurar a localização do registro.
Para usar um registro personalizado, crie um .npmrc arquivo na raiz do seu projeto:
registry=https://your-private-registry.com/
//your-private-registry.com/:_authToken=${NPM_TOKEN}
Pacotes locais e módulos privados
Pacotes locais e módulos privados são suportados ao construir aplicativos TypeScript Azure Function.
Para incluir pacotes locais usando compilação remota, faça referência a eles no arquivo package.json:
{
"dependencies": {
"@azure/functions": "^4.0.0",
"my-private-package": "file:../my-private-package",
"another-local-package": "file:./packages/local-lib"
}
}
Para incluir dependências locais usando a compilação local, instale as dependências localmente e implante com a compilação remota desativada:
# Install all dependencies including local ones
npm install
# Build your TypeScript project
npm run build
# Publish with local build
func azure functionapp publish <APP_NAME> --no-build
Use pacotes do espaço de trabalho
Para configurações de monorepo ou npm workspace, faça referência a pacotes compartilhados usando npm workspaces no seu package.json arquivo:
{
"name": "functions-app",
"dependencies": {
"@azure/functions": "^4.0.0",
"@mycompany/shared-lib": "workspace:*"
},
"workspaces": [
"packages/*"
]
}
Empacotar antes da implantação
Use ferramentas de agrupamento como webpack, esbuild ou rollup para criar um único pacote antes da implantação:
# Bundle your application
npm run bundle
# Deploy the bundled output
func azure functionapp publish <APP_NAME> --no-build