Baue und deploye TypeScript Azure Functions Apps

Azure Functions unterstützt mehrere Build-Optionen, um Ihre TypeScript-Apps in Azure zu veröffentlichen. Wählen Sie Ihre Build-Methode basierend auf Ihrer lokalen Umgebung, App-Abhängigkeiten, Anforderungen an die TypeScript-Kompilierung und Laufzeitbedarf.

Wahl einer Baumethode

Faktor Lokale Erstellung (empfohlen) Fernbau
Am besten geeignet für: Komplexe Builds, Monorepos, benutzerdefinierte Werkzeuge Einfache Projekte, schnelle Deployments
Paketgröße Größer (einschließlich node_modules) Kleiner (Abhängigkeiten installiert in Azure)
TypeScript-Kompilierung Du kompilierst lokal Azure kompiliert automatisch
Native binäre Kompatibilität Sie müssen die Zielarchitektur abgleichen Automatisch verarbeitet (Linux x64)
Risiko einer Zeitüberschreitung beim Build Keine (läuft auf deinem Rechner) Möglich für große Abhängigkeitsmengen
Steuerung Vollständig (beliebiges Build-Tool, Bundler oder Optimierer) Beschränkt auf Plattform-Standardeinstellungen

Für private NPM-Pakete oder benutzerdefinierte Registrierungen siehe Benutzerdefinierte Abhängigkeiten.

Paketiere deine App für die Bereitstellung

Wenn Sie Ihre TypeScript-Funktions-App auf Azure bereitstellen, muss Ihr Bereitstellungspaket folgende Anforderungen erfüllen:

  • JavaScript-Ausgabe erforderlich: Azure Functions führt JavaScript aus, daher muss TypeScript vor oder während der Bereitstellung kompiliert werden.

  • Stammebene host.json: Stellen Sie sicher, dass sich eine einzelne host.json Datei im Stammverzeichnis des Bereitstellungspakets befindet und nicht in einem Unterordner geschachtelt ist.

  • package.json main Feld: Die Funktionslaufzeit liest dieses Feld beim Start, um Ihre Funktionen zu finden und zu indexieren. Es muss auf deinen kompilierten JavaScript-Einstiegspunkt verweisen (zum Beispiel, dist/src/index.js).

  • Entwicklungsdateien ausschließen: Verwenden Sie eine .funcignore Datei, um unnötige Dateien aus der Bereitstellung auszuschließen, wie in diesem Beispiel:

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

Behalte auch diese Abwägungen bei der Planung deines Einsatzes im Hinterkopf:

  • Die Build-Umgebung muss mit der Produktion übereinstimmen: Abhängigkeiten von nativen Binärdateien müssen für die Linux-x64-Architektur erstellt werden. Der Remote-Build übernimmt dies automatisch; Für den lokalen Build sollten Sie Docker oder eine containerisierte Build-Umgebung verwenden.
  • Die Größe des Deployment-Pakets beeinflusst den Cold Start: Große Abhängigkeitssätze erhöhen die Cold-Start-Latenz, da die Laufzeit jede Datei einzeln laden muss. Wenn Sie Ihre App mit Tools wie esbuild oder webpack in weniger Dateien bündeln, kann das die Startzeit erheblich verkürzen.
  • Der entfernte Build hat Timeout-Limits: Wenn die Installation von Abhängigkeiten oder die TypeScript-Kompilierung die Plattformgrenzen überschreitet, scheitert der Build. Nutze einen lokalen Build mit vorgefertigten Abhängigkeiten für große Projekte.
  • Die Modulinitialisierung hat Zeitbegrenzungen: Node.js Modullade- und Funktionsindexierung während des Starts sind zeitlich begrenzt. Reduziere oberste Importe oder nutze dynamische Importe, wenn möglich.

Lokaler Build

Wenn du keinen entfernten Build explizit anforderst, installiert dein Rechner Abhängigkeiten und kompiliert TypeScript. Anschließend paketierst und deployest du das gesamte kompilierte Projekt und die Abhängigkeiten lokal in deine Funktions-App.

Der lokale Build führt zu einem größeren Paket-Upload, gibt dir aber die vollständige Kontrolle über den Build-Prozess und stellt die Kompatibilität mit deiner Entwicklungsumgebung sicher.

Für TypeScript-Projekte, die lokalen Build verwenden:

  1. Prekompilieren Sie TypeScript: Kompilieren Sie Ihren TypeScript-Code lokal vor der Bereitstellung.
  2. Abhängigkeiten installieren: Führen Sie npm install oder yarn install aus, um die Abhängigkeiten lokal zu installieren.
  3. Build-Verifikation: Stellen Sie sicher, dass Ihre Build-Ausgaben in Ihrer lokalen Umgebung korrekt funktionieren.
  4. Komplizierte Ausgabe deployen: Das kompilierte JavaScript zusammen mit Abhängigkeiten bereitstellen.

Beispiel-Build-Befehle für lokalen Builds:

# 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

Du kannst die folgenden Tools so konfigurieren, dass sie den lokalen Build verwenden:

Remotebuild

Wenn Sie Remote Build verwenden, übernimmt die Functions-Plattform die Paketinstallation, die TypeScript-Kompilierung und stellt die Kompatibilität mit der entfernten Laufzeitumgebung sicher.

Mit Remote Build erhält man ein kleineres Deployment-Paket, weil man keine JavaScript-Dateien einfügen node_modules oder kompilieren muss.

Wenn Sie TypeScript-Projekte per Remote-Build bereitstellen:

  1. Automatische Erkennung: Die Plattform erkennt TypeScript-Projekte durch das Vorhandensein von tsconfig.json.
  2. Kompilierung: Die Plattform kompiliert TypeScript-Dateien mithilfe der TypeScript-Konfiguration Ihres Projekts.
  3. Installation von Abhängigkeiten: Die Plattform installiert sowohl dependencies als auch devDependencies von package.json, da Build-Zeit-Pakete wie typescript für die Kompilierung benötigt werden.
  4. Optimierung: Die Plattform enthält nur notwendige Dateien im endgültigen Bereitstellungspaket.

Sie können Remote Build verwenden, wenn Sie Ihre TypeScript-App veröffentlichen, indem Sie diese Tools nutzen:

Informationen zum Aktivieren des Remotebuilds für andere Szenarien, z. B. die kontinuierliche Übermittlung mit Azure-Pipelines, finden Sie unter Aktivieren des Remotebuilds.

Benutzerdefinierte Abhängigkeiten

Azure Functions unterstützt benutzerdefinierte und private npm-Abhängigkeiten durch die Verwendung benutzerdefinierter npm-Register, privater oder lokaler Pakete.

Remote-Build mit benutzerdefinierter NPM-Registry

Wenn deine privaten Pakete in einem benutzerdefinierten NPM-Register verfügbar sind, kannst du nach der Konfiguration des Registry-Standorts einen Remote-Build anfordern.

Um eine benutzerdefinierte Registry zu verwenden, erstelle eine .npmrc Datei in deinem Projektroot:

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

Lokale Pakete und private Module

Lokale Pakete und private Module werden beim Bau von TypeScript Azure Function-Apps unterstützt.

Um lokale Pakete mit Remote-Build einzubeziehen, referenziere sie in deiner package.json Datei:

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

Um lokale Abhängigkeiten mit lokalem Build einzubeziehen, installieren Sie die Abhängigkeiten lokal und stellen Sie sie mit deaktiviertem Remotebuild bereit:

# 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

Workspace-Pakete verwenden

Für Monorepo- oder npm-Arbeitsbereiche referenzieren Sie gemeinsam genutzte Pakete, indem Sie npm-Arbeitsbereiche in Ihrer package.json Datei verwenden:

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

Vor der Bereitstellung paketieren

Verwenden Sie Bündelwerkzeuge wie Webpack, esbuild oder Rollup, um vor der Bereitstellung ein einziges Bundle zu erstellen:

# Bundle your application
npm run bundle

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