Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Funções do Azure suporta múltiplas opções de compilação para publicar as suas aplicações TypeScript no Azure. Escolha o seu método de compilação com base no ambiente local, dependências da aplicação, requisitos de compilação TypeScript e necessidades de runtime.
Escolher um método de construção
| Fator | Construção local (recomendado) | Construção remota |
|---|---|---|
| Melhor para | Construções complexas, monorepos, ferramentas personalizadas | Projetos simples, implementações rápidas |
| Tamanho da embalagem | Maior (inclui node_modules) |
Menor (dependências instaladas no Azure) |
| Compilação TypeScript | Compilas localmente | O Azure compila automaticamente |
| Compatibilidade binária nativa | Tens de corresponder à arquitetura alvo | Gerido automaticamente (Linux x64) |
| Risco de tempo limite da compilação | Nenhum (é executado na tua máquina) | Possível para grandes conjuntos de dependências |
| Controlo | Completo (qualquer ferramenta de build, agregador, otimizador) | Limitado aos padrões padrão da plataforma |
Para pacotes npm privados ou registos personalizados, veja Dependências personalizadas.
Empacota a tua aplicação para implementação
Ao implementar a sua aplicação de funções TypeScript para o Azure, o seu pacote de implementação deve cumprir estes requisitos:
Saída JavaScript necessária: O Funções do Azure executa JavaScript, pelo que o TypeScript deve ser compilado antes ou durante a implementação.
Nível
host.jsonraiz: Certifique-se de que um únicohost.jsonficheiro está na raiz do pacote de implementação, não estando dentro de uma subpasta.package.jsonmaincampo: O runtime das Funções lê este campo no arranque para localizar e indexar as suas funções. Deve apontar para o seu ponto de entrada JavaScript compilado (por exemplo,dist/src/index.js).Excluir ficheiros de desenvolvimento: Use um
.funcignoreficheiro para excluir ficheiros desnecessários da implementação, como neste exemplo:.git/ .vscode/ local.settings.json test/ .env tsconfig.json src/ node_modules/
Também tenha em mente estes compromissos ao planear a sua implantação:
- O ambiente de compilação deve corresponder à produção: Dependências com binários nativos devem ser construídas para arquitetura Linux x64. A build remota trata disto automaticamente; para construção local, considere usar Docker ou um ambiente de compilação containerizado.
- O tamanho do pacote de implementação afeta o arranque a frio: Grandes conjuntos de dependências aumentam a latência de arranque a frio porque o tempo de execução tem de carregar cada ficheiro individualmente. Agrupar a sua aplicação em menos ficheiros com ferramentas como o esbuild ou webpack pode reduzir significativamente o tempo de arranque.
- A compilação remota tem limites de timeout: 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 grandes.
- A inicialização de módulos tem limites de tempo: Node.js carregamento de módulos e indexação de funções durante o arranque são limitadas no tempo. Reduza importações de topo ou use importações dinâmicas sempre que possível.
Construção local
Se não solicitares explicitamente uma build remota, a tua máquina instala dependências e compila o TypeScript. Depois, empacotas e implementas todo o projeto compilado e as dependências localmente na tua aplicação funcional.
A compilação local resulta num carregamento de pacotes maior, mas dá-lhe controlo total sobre o processo de compilação e garante compatibilidade com o seu ambiente de desenvolvimento.
Para projetos TypeScript que usam compilação local:
- Precompile TypeScript: Compila o teu código TypeScript localmente antes da implementação.
-
Instalar dependências: Executar
npm installouyarn installinstalar dependências localmente. - Verificação de builds: Garanta que os resultados das builds funcionam corretamente no seu ambiente local.
- Implementar a saída compilada: Implementar o JavaScript compilado juntamente 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
Pode configurar as seguintes ferramentas para usar compilação local:
- Azure Functions Core Tools: utilizar
func azure functionapp publishcom o--no-buildsinalizador. -
AZ CLI:
az functionapp deployment source config-zip -
Entrega contínua usando GitHub Actions: defina o parâmetro
remote-buildparafalseno plano Flex Consumption ou definascm-do-build-during-deploymenteenable-oryx-buildparafalsenos planos dedicados.
Compilação remota
Quando usa a build remota, a plataforma Functions gere a instalação de pacotes, a compilação de TypeScript e garante a compatibilidade com o ambiente de execução remoto.
Ao usar build remota, obtém um pacote de implementação mais pequeno porque não precisa de incluir node_modules ou compilar ficheiros JavaScript.
Quando implementas projetos TypeScript usando compilação remota:
-
Deteção automática: A plataforma deteta projetos TypeScript pela presença de
tsconfig.json. - Compilação: A plataforma compila ficheiros TypeScript utilizando a configuração TypeScript do seu projeto.
-
Instalação de dependências: A plataforma instala tanto
dependenciescomodevDependenciesa partir depackage.json, uma vez que pacotes de compilação comotypescriptsão necessários para a compilação. - Otimização: A plataforma inclui apenas os ficheiros necessários no pacote final de implementação.
Pode usar a compilação remota ao publicar a sua aplicação TypeScript usando estas ferramentas:
-
Funções do Azure Core Tools: o
func azure functionapp publishcomando requer a--build-remote=trueflag para ativar a compilação remota de Node.js aplicações. -
AZ CLI:
az functionapp deployment source config-ziprequer o--build-remote=trueflag para ativar a compilação remota para Node.js aplicações. - Visual Studio Code: Funções do Azure: Deploy to Azure... comando usa sempre uma build remota.
-
Entrega contínua com Ações do GitHub: a ação Azure/functions-action@v1 usa compilação remota quando o
remote-buildparâmetro está definido comotruepara o plano Flex Consumption ou quandoscm-do-build-during-deploymenteenable-oryx-buildestão definidos comotruepara planos dedicados.
Para permitir a compilação remota para outros cenários, como entrega contínua com Azure Pipelines, veja Ativar a Construção Remota.
Dependências personalizadas
O Funções do Azure suporta dependências npm personalizadas e privadas utilizando registos npm personalizados, pacotes privados ou pacotes locais.
Compilação remota com repositório npm personalizado
Quando os seus pacotes privados estão disponíveis num registo npm personalizado, pode solicitar uma compilação remota após configurar a localização do registo.
Para usar um registo personalizado, crie um .npmrc ficheiro 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 na construção de aplicações TypeScript Azure Function.
Para incluir pacotes locais usando compilação remota, referencia-os no seu package.json ficheiro:
{
"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 compilação local, instale as dependências localmente e implemente 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 de espaço de trabalho
Para configurações de monorepo ou de workspaces do npm, referencie pacotes partilhados através dos workspaces do npm no seu ficheiro package.json:
{
"name": "functions-app",
"dependencies": {
"@azure/functions": "^4.0.0",
"@mycompany/shared-lib": "workspace:*"
},
"workspaces": [
"packages/*"
]
}
Bundle antes da implementação
Use ferramentas de agrupamento como webpack, esbuild ou rollup para criar um único bundle antes da implementação:
# Bundle your application
npm run bundle
# Deploy the bundled output
func azure functionapp publish <APP_NAME> --no-build