TypeScript Azure Functions-apps bouwen en implementeren

Azure Functions ondersteunt meerdere build-opties om je TypeScript-apps naar Azure te publiceren. Kies je buildmethode op basis van je lokale omgeving, app-afhankelijkheden, TypeScript-compilatievereisten en runtime-vereisten.

Het kiezen van een bouwmethode

Factor Lokale compilatie (aanbevolen) Externe bouw
Geschikt voor Complexe buildprocessen, monorepo's, maatwerktools Eenvoudige projecten, snelle implementaties
Pakketgrootte Groter (inclusief node_modules) Kleiner (afhankelijkheden in Azure geïnstalleerd)
TypeScript-compilatie Je compileert lokaal Azure compileert automatisch
Natieve binaire compatibiliteit Je moet overeenkomen met de doelarchitectuur Automatisch afgehandeld (Linux x64)
Risico op buildtime-out Geen (draait op je computer) Mogelijk voor grote afhankelijkheidsverzamelingen
Control Volledig (elke buildtool, bundler, optimizer) Beperkt tot platformstandaardinstellingen

Voor private npm-pakketten of aangepaste registers, zie Aangepaste afhankelijkheden.

Pak je app in voor uitrol

Bij het uitrollen van je TypeScript-functieapp naar Azure moet je implementatiepakket aan de volgende eisen voldoen:

  • JavaScript-uitvoer vereist: Azure Functions draait JavaScript, dus TypeScript moet vóór of tijdens de implementatie worden gecompileerd.

  • Hoofdniveau host.json: zorg ervoor dat één host.json bestand zich in de hoofdmap van het implementatiepakket bevindt, niet genest in een submap.

  • package.json main veld: De Functions-runtime leest dit veld bij het opstarten om je functies te vinden en te indexeren. Het moet wijzen op je gecompileerde JavaScript-instappunt (bijvoorbeeld, dist/src/index.js).

  • Ontwikkelingsbestanden uitsluiten: Gebruik een .funcignore bestand om onnodige bestanden uit te sluiten van deployment, zoals in dit voorbeeld:

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

Houd ook deze afwegingen in gedachten bij het plannen van je inzet:

  • De bouwomgeving moet overeenkomen met de productie: Afhankelijkheden met native binaries moeten worden gebouwd voor de Linux x64-architectuur. Remote build regelt dit automatisch; Voor lokale builds kun je overwegen Docker of een containerized build environment te gebruiken.
  • De grootte van het deployment-pakket beïnvloedt cold start: Grote afhankelijkheidssets verhogen cold start latentie omdat de runtime elk bestand afzonderlijk moet laden. Het bundelen van je app in minder bestanden met tools zoals esbuild of webpack kan de opstarttijd aanzienlijk verkorten.
  • Voor externe builds gelden time-outlimieten: als de installatie van afhankelijkheden of de TypeScript-compilatie de platformlimieten overschrijdt, mislukt de build. Gebruik een lokale build met vooraf gebouwde afhankelijkheden voor grote projecten.
  • Module-initialisatie kent tijdslimieten: Node.js module-laden en functieindexering tijdens het opstarten zijn tijdsgebonden. Verminder importen op topniveau of gebruik dynamische importen waar mogelijk.

Lokale versie

Als je niet expliciet een remote build aanvraagt, installeert je machine afhankelijkheden en compileert TypeScript. Vervolgens verpak en deploy je het gehele gecompileerde project en de afhankelijkheden lokaal naar je functie-app.

Lokale build resulteert in een grotere pakketupload, maar geeft je volledige controle over het buildproces en zorgt voor compatibiliteit met je ontwikkelomgeving.

Voor TypeScript-projecten die lokale builds gebruiken:

  1. Precompileer TypeScript: Compileer je TypeScript-code lokaal voordat je het uitrolt.
  2. Afhankelijkheden installeren: Voer npm install of yarn install uit om afhankelijkheden lokaal te installeren.
  3. Verificatie van de build: Zorg ervoor dat de output van je build goed werkt in je lokale omgeving.
  4. Implementeer gecompileerde uitvoer: Implementeer de gecompileerde JavaScript-code samen met afhankelijkheden.

Voorbeeldcommando's voor een lokale build:

# 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

Je kunt de volgende tools configureren om lokale builds te gebruiken:

Externe build

Wanneer je remote build gebruikt, verzorgt het Functions-platform de pakketinstallatie, TypeScript-compilatie en zorgt het voor compatibiliteit met de remote runtime-omgeving.

Door remote build te gebruiken, krijg je een kleiner deploymentpakket omdat je geen JavaScript-bestanden hoeft toe te voegen node_modules of te compileren.

Wanneer je TypeScript-projecten uitrolt met behulp van remote build:

  1. Automatische detectie: Het platform detecteert TypeScript-projecten door de aanwezigheid van tsconfig.json.
  2. Compilatie: Het platform compileert TypeScript-bestanden met behulp van de TypeScript-configuratie van je project.
  3. Afhankelijkheidsinstallatie: Het platform installeert zowel dependencies als devDependencies vanaf package.json, aangezien build-time pakketten zoals typescript nodig zijn voor compilatie.
  4. Optimalisatie: Het platform bevat alleen noodzakelijke bestanden in het uiteindelijke deploymentpakket.

Je kunt remote build gebruiken wanneer je je TypeScript-app publiceert met behulp van deze tools:

Zie Remote Build inschakelen voor andere scenario's, zoals Continue levering met Azure-pipelines.

Aangepaste afhankelijkheden

Azure Functions ondersteunt aangepaste en private npm-afhankelijkheden door gebruik te maken van aangepaste npm-registraties, private pakketten of lokale pakketten.

Externe build met aangepaste npm-registratie

Wanneer je privépakketten beschikbaar zijn in een aangepaste npm-register, kun je na het configureren van de registerlocatie een externe build aanvragen.

Om een aangepaste registry te gebruiken, maak je een .npmrc bestand aan in je projectroot:

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

Lokale pakketten en privémodules

Lokale pakketten en privémodules worden ondersteund bij het bouwen van TypeScript Azure Function-apps.

Om lokale pakketten met remote build op te nemen, verwijs je naar deze in je package.json bestand:

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

Om lokale afhankelijkheden met lokale build te verwerken, installeer je de afhankelijkheden lokaal en deploy je met de externe build uitgeschakeld:

# 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

Gebruik workspace-pakketten

Voor monorepo- of npm-werkruimteopstellingen raadpleeg gedeelde pakketten door gebruik te maken van npm-werkruimtes in je package.json bestand:

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

Bundelen vóór implementatie

Gebruik bundlingtools zoals webpack, esbuild of rollup om één bundel te maken vóór de uitrol:

# Bundle your application
npm run bundle

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