Créer et déployer des applications TypeScript Azure Functions

Azure Functions prend en charge plusieurs options de compilation pour publier vos applications TypeScript sur Azure. Choisissez votre méthode de compilation en fonction de votre environnement local, des dépendances de l’application, des exigences de compilation TypeScript et des besoins en temps réel.

Choisir une méthode de construction

Facteur Construction locale (recommandée) Construction à distance
Idéal pour Compilations complexes, monorepos, outils personnalisés Projets simples, déploiements rapides
Taille du package Plus grand (comprend node_modules) Plus petits (dépendances installées dans Azure)
Compilation de TypeScript Vous compilez localement Azure compile automatiquement
Compatibilité binaire native Vous devez correspondre à l’architecture cible Géré automatiquement (Linux x64)
Risque de délai de construction Aucun (fonctionne sur votre machine) Possible pour de grands ensembles de dépendances
Contrôle Complet (tout outil de build, bundler, optimiseur) Limité aux paramètres par défaut de la plateforme

Pour les packages npm privés ou les registres personnalisés, voir Dépendances personnalisées.

Emballez votre application pour le déploiement

Lors du déploiement de votre application de fonction TypeScript sur Azure, votre package de déploiement doit répondre à ces exigences :

  • Sortie JavaScript requise : Azure Functions exécute JavaScript, donc TypeScript doit être compilé avant ou pendant le déploiement.

  • Niveau host.jsonracine : vérifiez qu’un seul host.json fichier se trouve à la racine du package de déploiement, et non imbriqué dans un sous-dossier.

  • package.json main champ : L’exécution des fonctions lit ce champ au démarrage pour localiser et indexer vos fonctions. Il doit pointer vers votre point d’entrée JavaScript compilé (par exemple, dist/src/index.js).

  • Exclure les fichiers de développement : Utilisez un .funcignore fichier pour exclure les fichiers inutiles du déploiement, comme dans cet exemple :

    .git/
    .vscode/
    local.settings.json
    test/
    .env
    tsconfig.json
    src/
    node_modules/
    

Gardez également ces compromis à l’esprit lors de la planification de votre déploiement :

  • L’environnement de construction doit correspondre à la production : les dépendances avec des binaires natifs doivent être construites pour l’architecture Linux x64. La compilation à distance gère cela automatiquement ; pour une compilation locale, envisagez d’utiliser Docker ou un environnement de compilation conteneurisé.
  • La taille du package de déploiement influence le démarrage à froid : de grands ensembles de dépendances augmentent la latence de démarrage à froid car l’exécution doit charger chaque fichier individuellement. Regrouper votre application dans moins de fichiers avec des outils comme esbuild ou webpack peut réduire considérablement le temps de démarrage.
  • La compilation à distance a des limites de délai : si l’installation de dépendances ou la compilation TypeScript dépasse les limites de la plateforme, la compilation échoue. Utilisez une compilation locale avec des dépendances préconstruites pour les grands projets.
  • L’initialisation des modules a des limites de temps : Node.js chargement des modules et l’indexation des fonctions au démarrage sont limités dans le temps. Réduisez les importations de haut niveau ou utilisez des importations dynamiques lorsque possible.

Build locale

Si vous ne demandez pas explicitement une compilation à distance, votre machine installe des dépendances et compile TypeScript. Vous emballez ensuite et déployez localement l’ensemble du projet compilé et des dépendances dans votre application de fonctions.

La compilation locale entraîne un upload de paquet plus volumineux mais vous donne un contrôle total sur le processus de compilation et garantit la compatibilité avec votre environnement de développement.

Pour les projets TypeScript utilisant une compilation locale :

  1. Precompile TypeScript : Compile localement ton code TypeScript avant le déploiement.
  2. Installer les dépendances : Exécuter npm install ou yarn install installer les dépendances localement.
  3. Vérification des compilations : Assurez-vous que vos sorties de compilation fonctionnent correctement dans votre environnement local.
  4. Déploie la sortie compilée : Déploie le JavaScript compilé avec les dépendances.

Exemples de commandes de build pour une build locale :

# 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

Vous pouvez configurer les outils suivants pour utiliser la compilation locale :

Build distante

Lorsque vous utilisez la compilation à distance, la plateforme Functions gère l’installation des paquets, la compilation TypeScript et assure la compatibilité avec l’environnement d’exécution distant.

En utilisant la compilation à distance, vous obtenez un paquet de déploiement plus petit car vous n’avez pas besoin d’inclure node_modules ou de compiler des fichiers JavaScript.

Lorsque vous déployez des projets TypeScript en utilisant une compilation distante :

  1. Détection automatique : La plateforme détecte les projets TypeScript par la présence de tsconfig.json.
  2. Compilation : La plateforme compile les fichiers TypeScript en utilisant la configuration TypeScript de votre projet.
  3. Installation des dépendances : La plateforme installe à la fois dependencies et devDependencies à partir de package.json, car des paquets nécessaires à la compilation, comme typescript, doivent aussi être installés.
  4. Optimisation : La plateforme inclut uniquement les fichiers nécessaires dans le package de déploiement final.

Vous pouvez utiliser la compilation à distance lorsque vous publiez votre application TypeScript en utilisant ces outils :

Pour activer la génération à distance pour d’autres scénarios, comme la livraison continue avec Azure Pipelines, consultez Activation de la build à distance.

Dépendances personnalisées

Azure Functions prend en compte les dépendances npm personnalisées et privées en utilisant des registres npm personnalisés, des paquets privés ou des paquets locaux.

Compilation à distance avec un registre npm personnalisé

Lorsque vos forfaits privés sont disponibles dans un registre npm personnalisé, vous pouvez demander une compilation à distance après avoir configuré l’emplacement du registre.

Pour utiliser un registre personnalisé, créez un .npmrc fichier dans la racine de votre projet :

registry=https://your-private-registry.com/
//your-private-registry.com/:_authToken=${NPM_TOKEN}

Paquets locaux et modules privés

Les packages locaux et les modules privés sont pris en charge lors de la création d’applications TypeScript Azure Function.

Pour inclure des paquets locaux utilisant la compilation à distance, référez-les dans votre package.json fichier :

{
  "dependencies": {
    "@azure/functions": "^4.0.0",
    "my-private-package": "file:../my-private-package",
    "another-local-package": "file:./packages/local-lib"
  }
}

Pour inclure les dépendances locales via la compilation locale, installez les dépendances localement et déployez avec la compilation distante désactivée :

# 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

Utiliser des paquets d’espace de travail

Pour les configurations de monorepo ou d’espaces de travail npm, référencez les packages partagés en utilisant les espaces de travail npm dans votre package.json fichier :

{
  "name": "functions-app",
  "dependencies": {
    "@azure/functions": "^4.0.0",
    "@mycompany/shared-lib": "workspace:*"
  },
  "workspaces": [
    "packages/*"
  ]
}

Bundle avant le déploiement

Utilisez des outils de regroupement comme webpack, esbuild ou rollup pour créer un bundle unique avant le déploiement :

# Bundle your application
npm run bundle

# Deploy the bundled output
func azure functionapp publish <APP_NAME> --no-build