Delen via


JavaScript aanpassen voor Azure Pipelines

U kunt Azure Pipelines gebruiken om uw JavaScript-apps te bouwen zonder dat u een eigen infrastructuur hoeft in te stellen. Hulpprogramma's die u vaak gebruikt voor het bouwen, testen en uitvoeren van JavaScript-apps, zoals npm, Node, Yarn en Gulp, worden vooraf geïnstalleerd op door Microsoft gehoste agents in Azure Pipelines.

Raadpleeg voor de versie van Node.js en npm die vooraf is geïnstalleerd, naar door Microsoft gehoste agents. Als u een specifieke versie van deze hulpprogramma's wilt installeren op door Microsoft gehoste agents, voegt u de taak Node Tool Installer toe aan het begin van uw proces. U kunt ook een zelf-hostende agent gebruiken.

Als u uw eerste pijplijn wilt maken met JavaScript, raadpleegt u de quickstart voor JavaScript.

Een specifieke versie van Node.js gebruiken

Als u een versie van Node.js en npm nodig hebt die nog niet is geïnstalleerd op de door Microsoft gehoste agent, gebruikt u de taak voor het installatieprogramma van het knooppuntprogramma. Voeg het volgende fragment toe aan uw azure-pipelines.yml bestand.

Notitie

De gehoste agents worden regelmatig bijgewerkt en het instellen van deze taak resulteert in aanzienlijke tijd bijwerken naar een nieuwere secundaire versie telkens wanneer de pijplijn wordt uitgevoerd. Gebruik deze taak alleen als u een specifieke knooppuntversie in uw pijplijn nodig hebt.

- task: UseNode@1
  inputs:
    version: '16.x' # replace this value with the version that you need for your project

Als u een versie van Node.js/npm nodig hebt die nog niet op de agent is geïnstalleerd:

  1. Selecteer taken in de pijplijn, kies de fase waarmee uw buildtaken worden uitgevoerd en selecteer + vervolgens om een nieuwe taak aan die fase toe te voegen.

  2. Zoek en voeg in de taakcatalogus de taak Node Tool Installer toe.

  3. Selecteer de taak en geef de versie op van de Node.js runtime die u wilt installeren.

Als u alleen het npm-hulpprogramma wilt bijwerken, voert u de npm i -g npm@version-number opdracht uit in het buildproces.

Meerdere knooppuntversies gebruiken

U kunt uw app bouwen en testen op meerdere versies van Node met de taak voor het installatieprogramma van het knooppuntprogramma.

pool:
  vmImage: 'ubuntu-latest'
strategy:
  matrix:
    node_16_x:
      node_version: 16.x
    node_13_x:
      node_version: 18.x

steps:
- task: UseNode@1
  inputs:
    version: $(node_version)

- script: npm install

Bekijk de uitvoering van meerdere configuraties.

Hulpprogramma's installeren op uw buildagent

Als u hulpprogramma's hebt die afhankelijkheden voor ontwikkeling in uw project package.json of package-lock.json bestand zijn, installeert u uw hulpprogramma's en afhankelijkheden via npm. De exacte versie van de hulpprogramma's wordt gedefinieerd in het project, geïsoleerd van andere versies die aanwezig zijn op de buildagent.

Gebruik een script of de npm-taak.

Een script gebruiken om te installeren met package.json

- script: npm install --only=dev

Gebruik de npm-taak om te installeren met package.json

- task: Npm@1
  inputs:
     command: 'install'

Voer hulpprogramma's uit die op deze manier zijn geïnstalleerd met behulp van de npm-pakketrunner npx , waarmee hulpprogramma's worden gedetecteerd die op deze manier zijn geïnstalleerd in de padresolutie. In het volgende voorbeeld wordt de mocha testrunner aanroepen, maar wordt gezocht naar de versie die is geïnstalleerd als een ontwikkelingsafhankelijkheid voordat u een wereldwijd geïnstalleerde (via npm install -g) versie gebruikt.

- script: npx mocha

Als u hulpprogramma's wilt installeren die uw project nodig heeft, maar die niet zijn ingesteld als ontwikkelingsafhankelijkheden, package.jsonroept npm install -g u aan vanuit een scriptfase in uw pijplijn.

In het volgende voorbeeld wordt de nieuwste versie van de Angular CLI geïnstalleerd met behulp van npm. De rest van de pijplijn kan vervolgens het ng hulpprogramma uit andere script fasen gebruiken.

Notitie

Op door Microsoft gehoste Linux-agents voert u de opdracht vooraf met sudo, zoals sudo npm install -g.

- script: npm install -g @angular/cli

Tip

Deze taken worden uitgevoerd telkens wanneer uw pijplijn wordt uitgevoerd, dus houd rekening met de impact die het installeren van hulpprogramma's heeft op buildtijden. Overweeg om zelf-hostende agents te configureren met de versie van de hulpprogramma's die u nodig hebt als overhead een ernstige invloed heeft op uw buildprestaties.

Gebruik de npm - of opdrachtregeltaken in uw pijplijn om hulpprogramma's op uw buildagent te installeren.

Afhankelijkheden beheren

Gebruik Yarn of Azure Artifacts in uw build om pakketten te downloaden uit het openbare NPM-register. Dit register is een type privé-NPM-register dat u in het .npmrc bestand opgeeft.

NPM gebruiken

U kunt npm op de volgende manieren gebruiken om pakketten voor uw build te downloaden:

  • Rechtstreeks uitvoeren npm install in uw pijplijn, omdat het de eenvoudigste manier is om pakketten te downloaden uit een register zonder verificatie. Als uw build geen ontwikkelingsafhankelijkheden van de agent nodig heeft om uit te voeren, kunt u buildtijden versnellen met de --only=prod optie om npm install.
  • Gebruik een npm-taak. Deze taak is handig wanneer u een geverifieerd register gebruikt.
  • Gebruik een npm-verificatietaak. Deze taak is handig wanneer u vanuit uw taaklopers - Gulp, Grunt of Maven uitvoert npm install .

Als u een NPM-register wilt opgeven, plaatst u de URL's in een .npmrc bestand in uw opslagplaats. Als uw feed wordt geverifieerd, maakt u een npm-serviceverbinding op het tabblad Services in Project-instellingen om de referenties te beheren.

Als u npm-pakketten wilt installeren met een script in uw pijplijn, voegt u het volgende codefragment toe aan azure-pipelines.yml.

- script: npm install

Als u een privéregister wilt gebruiken dat is opgegeven in uw .npmrc bestand, voegt u het volgende fragment toe aan azure-pipelines.yml.

- task: Npm@1
  inputs:
    customEndpoint: <Name of npm service connection>

Als u registerreferenties wilt doorgeven aan npm-opdrachten via taaklopers zoals Gulp, voegt u de volgende taak toe aan azure-pipelines.yml voordat u de taakloper aanroept.

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

Gebruik de npm - of npm-verificatietaak in uw pijplijn om pakketten te downloaden en te installeren.

Als uw builds af en toe mislukken vanwege verbindingsproblemen wanneer u pakketten herstelt vanuit het npm-register, kunt u Azure Artifacts gebruiken met upstream-bronnen en de pakketten in de cache opslaan. De referenties van de pijplijn worden automatisch gebruikt wanneer u verbinding maakt met Azure Artifacts. Deze referenties zijn doorgaans afgeleid van het Project Collection Build Service-account .

Als u door Microsoft gehoste agents gebruikt, krijgt u elke keer dat u een build uitvoert een nieuwe machine. Dit betekent dat u de afhankelijkheden elke keer herstelt, wat een aanzienlijke hoeveelheid tijd kan duren. Om dit te verhelpen, kunt u Azure Artifacts of een zelf-hostende agent gebruiken. Vervolgens krijgt u het voordeel van het gebruik van de pakketcache.

Yarn gebruiken

Gebruik een scriptfase om Yarn aan te roepen om afhankelijkheden te herstellen. Yarn wordt vooraf geïnstalleerd op sommige door Microsoft gehoste agents. U kunt deze installeren en configureren op zelf-hostende agents zoals elk ander hulpprogramma.

- script: yarn install

Gebruik de CLI- of Bash-taak in uw pijplijn om Yarn aan te roepen.

JavaScript-compilers uitvoeren

Gebruik compilers zoals Babel en de TypeScript-compiler tsc om uw broncode te converteren naar versies die kunnen worden gebruikt door de Node.js runtime of in webbrowsers.

Als u een scriptobject hebt ingesteld in uw projectbestand package.json waarmee de compiler wordt uitgevoerd, roept u het aan in uw pijplijn met behulp van een scripttaak.

- script: npm run compile

U kunt compilers rechtstreeks vanuit de pijplijn aanroepen met behulp van de scripttaak. Deze opdrachten worden uitgevoerd vanuit de hoofdmap van de gekloonde opslagplaats voor broncode.

- script: tsc --target ES6 --strict true --project tsconfigs/production.json

Gebruik de npm-taak in uw pijplijn als u een compileerscript hebt gedefinieerd in uw project package.json om de code te bouwen. Gebruik de Bash-taak om uw code te compileren als u geen afzonderlijk script hebt gedefinieerd in de projectconfiguratie.

Eenheidstests uitvoeren

Configureer uw pijplijnen om uw JavaScript-tests uit te voeren, zodat ze resultaten produceren die zijn opgemaakt in de JUnit XML-indeling. Vervolgens kunt u de resultaten publiceren met behulp van de ingebouwde taak voor het publiceren van testresultaten .

Als uw testframework geen ondersteuning biedt voor JUnit-uitvoer, voegt u ondersteuning toe via een partnerrapportagemodule, zoals mocha-junit-reporter. U kunt uw testscript bijwerken om de JUnit reporter te gebruiken, of als de rapportgever opdrachtregelopties ondersteunt, geeft u deze opties door aan de taakdefinitie.

De volgende tabel bevat de meest gebruikte testlopers en de reporters die kunnen worden gebruikt om XML-resultaten te produceren:

Testloper Reporters voor het produceren van XML-rapporten
Mokka mocha-junit-reporter
cypress-multi-reporters
jasmijn jasmine-reporters
schertsen jest-junit
jest-junit-reporter
karma karma-junit-reporter
Ava tap-xunit

In het volgende voorbeeld wordt de mocha-junit-reporter gebruikt en wordt deze rechtstreeks aangeroepen mocha test met behulp van een script. Dit script produceert de JUnit XML-uitvoer op de standaardlocatie van ./test-results.xml.

- script: mocha test --reporter mocha-junit-reporter

Als u een test script in uw project package.json-bestand hebt gedefinieerd, kunt u het aanroepen met behulp van npm test.

- script: npm test

Testresultaten publiceren

Als u de resultaten wilt publiceren, gebruikt u de taak Testresultaten publiceren.

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: JUnit
    testResultsFiles: '**/test-results.xml'

Resultaten van codedekking publiceren

Als uw testscripts een hulpprogramma voor codedekking uitvoeren, zoals Istanbul, voegt u de taak Publicatiecodedekkingsresultaten toe. Wanneer u dit doet, kunt u metrische gegevens over dekking vinden in de samenvatting van de build en HTML-rapporten downloaden voor verdere analyse. De taak verwacht cobertura- of JaCoCo-rapportage-uitvoer, dus zorg ervoor dat uw hulpprogramma voor codedekking wordt uitgevoerd met de benodigde opties om de juiste uitvoer te genereren. Bijvoorbeeld: --report cobertura.

In het volgende voorbeeld wordt nyc, de opdrachtregelinterface van Istanbul, samen met mocha-junit-reporter gebruikt en wordt de opdracht aangeroepen npm test .

- script: |
    nyc --reporter=cobertura --reporter=html \
    npm test -- --reporter mocha-junit-reporter --reporter-options mochaFile=./test-results.xml
  displayName: 'Build code coverage report'

- task: PublishCodeCoverageResults@2
  inputs: 
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'

Gebruik de taken Testresultaten publiceren en Codedekkingsresultaten publiceren in uw pijplijn om testresultaten samen met codedekkingsresultaten te publiceren met behulp van Istanbul.

Stel de besturingsopties voor de taak Testresultaten publiceren in om de taak uit te voeren, zelfs als een vorige taak is mislukt, tenzij de implementatie is geannuleerd.

End-to-end-browser testen

Voer tests uit in headless browsers als onderdeel van uw pijplijn met hulpprogramma's zoals Protractor of Karma. Publiceer vervolgens de resultaten voor de build naar Azure DevOps met de volgende stappen:

  1. Installeer een headless browserteststuurprogramma, zoals headless Chrome of Firefox, of een browsersimuleerde tool zoals PhantomJS, op de buildagent.
  2. Configureer uw testframework om de optie headless browser/stuurprogramma van uw keuze te gebruiken volgens de documentatie van het hulpprogramma.
  3. Configureer uw testframework (meestal met een invoegtoepassing of configuratie van een reporter) om testresultaten met JUnit-indeling uit te voeren.
  4. Stel een scripttaak in om CLI-opdrachten uit te voeren die nodig zijn om de headless browserexemplaren te starten.
  5. Voer de end-to-end-tests uit in de pijplijnfasen, samen met uw eenheidstests.
  6. Publiceer de resultaten met behulp van dezelfde taak Testresultaten publiceren naast uw eenheidstests.

Web-apps verpakken

Pakkettoepassingen om al uw toepassingsmodules te bundelen met tussenliggende uitvoer en afhankelijkheden in statische assets die gereed zijn voor implementatie. Voeg een pijplijnfase toe na uw compilatie en tests om een hulpprogramma zoals webpack of ng-build uit te voeren met behulp van de Angular CLI.

In het eerste voorbeeld wordt aanroepen webpack. Als u dit wilt doen, moet u ervoor zorgen dat webpack deze is geconfigureerd als een ontwikkelingsafhankelijkheid in uw package.json projectbestand. Dit wordt uitgevoerd webpack met de standaardconfiguratie, tenzij u een webpack.config.js bestand in de hoofdmap van uw project hebt.

- script: webpack

In het volgende voorbeeld wordt de npm-taak gebruikt om het build scriptobject aan te roepen npm run build dat is gedefinieerd in het project package.json. Als u scriptobjecten in uw project gebruikt, wordt de logica voor de build verplaatst naar de broncode en uit de pijplijn.

- script: npm run build

Gebruik de CLI - of Bash-taak in uw pijplijn om uw verpakkingshulpprogramma aan te roepen, zoals webpack Angular ng build.

JavaScript-frameworks implementeren

Angular

Voor Angular-apps kunt u Angular-specifieke opdrachten opnemen, zoals ng-test, ng build en ng e2e. Als u Angular CLI-opdrachten in uw pijplijn wilt gebruiken, installeert u het angular/cli npm-pakket op de buildagent.

Notitie

Op door Microsoft gehoste Linux-agents voert u de opdracht vooraf met sudo, zoals sudo npm install -g.

- script: |
    npm install -g @angular/cli
    npm install
    ng build --prod

Voeg de volgende taken toe aan uw pijplijn:

  • npm

    • Opdracht: custom
    • Opdracht en argumenten: install -g @angular/cli
  • npm

    • Opdracht: install
  • bash

    • Type: inline
    • Script: ng build --prod

Voor tests in uw pijplijn waarvoor een browser moet worden uitgevoerd, zoals de ng-testopdracht in de starter-app, die Karma uitvoert, gebruikt u een headless browser in plaats van een standaardbrowser. In de Angular starter-app:

  1. Wijzig de browsers vermelding in het karma.conf.js projectbestand van browsers: ['Chrome'] in browsers: ['ChromeHeadless'].

  2. Wijzig de singleRun vermelding in het karma.conf.js projectbestand van een waarde in false true. Deze wijziging zorgt ervoor dat het Karma-proces stopt nadat het is uitgevoerd.

React en Vue

Alle afhankelijkheden voor uw React- en Vue-apps worden vastgelegd in uw package.json-bestand . Het azure-pipelines.yml-bestand bevat het standaardscript Node.js:

- script: |
    npm install
  displayName: 'npm install'

- script: |
    npm run build
  displayName: 'npm build'

De buildbestanden bevinden zich in een nieuwe map ( dist voor Vue) of build (voor React). Met dit fragment wordt een artefact gemaakt, www dat gereed is voor release. Het maakt gebruik van het knooppuntinstallatieprogramma, het kopiëren van bestandenen het publiceren van buildartefactentaken.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: UseNode@1
  inputs:
    version: '16.x'
  displayName: 'Install Node.js'

- script: |
    npm install
  displayName: 'npm install'

- script: |
    npm run build
  displayName: 'npm build'

- task: CopyFiles@2
  inputs:
    Contents: 'build/**' # Pull the build directory (React)
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs: 
    PathtoPublish: $(Build.ArtifactStagingDirectory) # dist or build files
    ArtifactName: 'www' # output artifact named www

Als u de release wilt vrijgeven, wijst u de releasetaak of het dist artefact aan en gebruikt u de Azure Web App Deploy-taak.build

Webpack

U kunt een webpack-configuratiebestand gebruiken om een compiler, zoals Babel of TypeScript, op te geven om JSX of TypeScript te transpileren naar gewone JavaScript en om uw app te bundelen.

- script: |
    npm install webpack webpack-cli --save-dev
    npx webpack --config webpack.config.js

Voeg de volgende taken toe aan uw pijplijn:

  • npm

    • Opdracht: custom
    • Opdracht en argumenten: install -g webpack webpack-cli --save-dev
  • bash

    • Type: inline
    • Script: npx webpack --config webpack.config.js

Taaklopers bouwen

Het is gebruikelijk om Gulp of Grunt te gebruiken als taakloper om een JavaScript-app te bouwen en te testen.

Slok

Gulp wordt vooraf geïnstalleerd op door Microsoft gehoste agents. Voer de gulp opdracht uit in het YAML-bestand:

- script: gulp                       # include any additional options that are needed

Als voor de stappen in uw gulpfile.js-bestand verificatie is vereist met een NPM-register:

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

- script: gulp                       # include any additional options that are needed

Voeg de taak Testresultaten publiceren toe om JUnit- of xUnit-testresultaten te publiceren op de server.

- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/TEST-RESULTS.xml'
    testRunTitle: 'Test results for JavaScript using gulp'

Voeg de taak Publicatiecodedekkingsresultaten toe om resultaten van de codedekking naar de server te publiceren. U vindt metrische dekkingsgegevens in de samenvatting van de build en u kunt HTML-rapporten downloaden voor verdere analyse.

- task: PublishCodeCoverageResults@1
  inputs: 
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'

De eenvoudigste manier om een pijplijn te maken als uw app Gebruikmaakt van Gulp is het gebruik van de Node.js met een gulp-buildsjabloon wanneer u de pijplijn maakt. Met deze sjabloon worden automatisch verschillende taken toegevoegd om Gulp-opdrachten aan te roepen en artefacten te publiceren. Selecteer in de taak Codedekking inschakelen om codedekking in te schakelen met behulp van Istanbul.

Grunt

Grunt wordt vooraf geïnstalleerd op door Microsoft gehoste agents. Voer de grunt-opdracht uit in het YAML-bestand:

- script: grunt                      # include any additional options that are needed

Als voor de stappen in uw Gruntfile.js bestand verificatie is vereist met een NPM-register:

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

- script: grunt                      # include any additional options that are needed

De eenvoudigste manier om een pijplijn te maken als uw app Grunt gebruikt, is door de Node.js te gebruiken met Grunt-buildsjabloon wanneer u de pijplijn maakt. Hiermee worden automatisch verschillende taken toegevoegd om Gulp-opdrachten aan te roepen en artefacten te publiceren. Selecteer in de taak de optie Publiceren naar TFS/Team Services om testresultaten te publiceren en selecteer Codedekking inschakelen om codedekking in te schakelen met behulp van Istanbul.

Uw code verpakken en leveren

Nadat u uw app hebt gebouwd en getest, kunt u de build-uitvoer uploaden naar Azure Pipelines, een npm- of Maven-pakket maken en publiceren, of de build-uitvoer verpakken in een .zip-bestand voor implementatie naar een webtoepassing.

Bestanden publiceren naar Azure Pipelines

Als u de volledige werkmap met bestanden wilt uploaden, gebruikt u de taak BuildArtefacten publiceren en voegt u het volgende toe aan uw azure-pipelines.yml bestand.

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)'

Als u een subset van bestanden wilt uploaden, kopieert u eerst de benodigde bestanden uit de werkmap naar een faseringsmap met de taak Bestanden kopiëren en gebruikt u vervolgens de taak BuildArtefacten publiceren.

- task: CopyFiles@2
  inputs:
    SourceFolder: '$(System.DefaultWorkingDirectory)'
    Contents: |
      **\*.js
      package.json
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1

Een module publiceren naar een NPM-register

Als de uitvoer van uw project een npm module is voor gebruik door andere projecten en niet voor een webtoepassing, gebruikt u de npm-taak om de module te publiceren naar een lokaal register of naar het openbare NPM-register. Geef elke keer dat u publiceert een unieke naam/versiecombinatie op.

Voorbeelden

In het eerste voorbeeld wordt ervan uitgegaan dat u versiegegevens (zoals via een npm-versie) beheert via wijzigingen in uw package.json bestand in versiebeheer. In het volgende voorbeeld wordt de scripttaak gebruikt om te publiceren naar het openbare register.

- script: npm publish

In het volgende voorbeeld wordt gepubliceerd naar een aangepast register dat is gedefinieerd in het bestand van .npmrc uw opslagplaats. Stel een npm-serviceverbinding in om verificatiereferenties in de verbinding te injecteren terwijl de build wordt uitgevoerd.

- task: Npm@1
  inputs:
     command: publish
     publishRegistry: useExternalRegistry
     publishEndpoint: https://my.npmregistry.com

In het laatste voorbeeld wordt de module gepubliceerd naar een Azure DevOps Services-pakketbeheerfeed.

- task: Npm@1
  inputs:
     command: publish
     publishRegistry: useFeed
     publishFeed: https://my.npmregistry.com

Zie Npm-pakketten publiceren en hoe kan ik mijn npm-pakketten versieren als onderdeel van het buildproces voor meer informatie over versiebeheer en het publiceren van npm-pakketten.

Een web-app implementeren

Als u een .zip-bestandarchief wilt maken dat gereed is voor publicatie naar een web-app, gebruikt u de taak Archiefbestanden :

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false

Als u dit archief wilt publiceren naar een web-app, raadpleegt u de implementatie van de Azure-web-app.

Artefacten publiceren naar Azure Pipelines

Gebruik de taak BuildArtefacten publiceren om bestanden te publiceren vanuit uw build naar Azure Pipelines.

Publiceren naar een NPM-register

Gebruik de npm-taak om een npm-pakket te maken en te publiceren. Zie Npm-pakketten publiceren voor meer informatie over versiebeheer en het publiceren van npm-pakketten.

Een web-app implementeren

Als u een .zip bestandarchief wilt maken dat gereed is voor publicatie naar een web-app, gebruikt u de taak Archiefbestanden. Als u dit archief wilt publiceren naar een web-app, raadpleegt u de implementatie van Azure Web App.

Installatiekopieën bouwen en pushen naar het containerregister

Zodra de broncode is gebouwd en uw eenheidstests zijn uitgevoerd en geslaagd zijn, kunt u ook een installatiekopieën bouwen en naar een containerregister pushen.

Problemen oplossen

Als u uw project op uw ontwikkelcomputer kunt bouwen, maar problemen ondervindt met het bouwen ervan in Azure Pipelines, bekijkt u de volgende mogelijke oorzaken en corrigerende acties:

  • Controleer of de versies van Node.js en de taakloper op uw ontwikkelcomputer overeenkomen met de versies van de agent. U kunt opdrachtregelscripts, zoals node --version in uw pijplijn, opnemen om te controleren wat er op de agent is geïnstalleerd. Gebruik het installatieprogramma voor knooppunthulpprogramma's (zoals uitgelegd in deze richtlijnen) om dezelfde versie op de agent te implementeren of voer npm install opdrachten uit om de gewenste versies bij te werken.

  • Als uw builds af en toe mislukken tijdens het herstellen van pakketten, heeft het NPM-register problemen of zijn er netwerkproblemen tussen het Azure-datacenter en het register. We kunnen deze factoren niet beheersen. Ontdek of het gebruik van Azure Artifacts met een npm-register als upstream-bron de betrouwbaarheid van uw builds verbetert.

  • Als u nvm verschillende versies van Node.js beheert, kunt u in plaats daarvan overschakelen naar de taak Voor het installatieprogramma voor knooppunten. (nvm is geïnstalleerd om historische redenen op de macOS-installatiekopieën.) nvm beheert meerdere Node.js versies door shellaliassen toe te voegen en te wijzigen PATH, wat slecht communiceert met de manier waarop Azure Pipelines elke taak in een nieuw proces uitvoert.

    De taak Node Tool Installer verwerkt dit model correct. Als voor uw werk echter het gebruik nvmis vereist, kunt u het volgende script toevoegen aan het begin van elke pijplijn:

    steps:
    - bash: |
        NODE_VERSION=16  # or whatever your preferred version is
        npm config delete prefix  # avoid a warning
        . ${NVM_DIR}/nvm.sh
        nvm use ${NODE_VERSION}
        nvm alias default ${NODE_VERSION}
        VERSION_PATH="$(nvm_version_path ${NODE_VERSION})"
        echo "##vso[task.prependPath]$VERSION_PATH"
    

    node Vervolgens werken andere opdrachtregelprogramma's voor de rest van de pijplijntaak. In elke stap waarin u de nvm opdracht gebruikt, start u het script met de volgende code:

    - bash: |
        . ${NVM_DIR}/nvm.sh
        nvm <command>
    

Veelgestelde vragen

V: Waar vind ik meer informatie over Azure Artifacts en de Package Management-service?

A: Pakketbeheer in Azure Artifacts

V: Waar vind ik meer informatie over taken?

A: Build-, release- en testtaken

V: Hoe kan ik een pijplijnfout oplossen met het bericht 'FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory'?

A: Dit fouttype treedt op wanneer het Node.js pakket de limiet voor geheugengebruik overschrijdt. Als u het probleem wilt oplossen, voegt u een variabele zoals NODE_OPTIONS toe en wijst u deze toe aan een waarde van --max_old_space_size=16384.

V: Hoe kan ik mijn npm-pakketten versien als onderdeel van het buildproces?

A: Een optie is het gebruik van een combinatie van versiebeheer en npm-versie. Aan het einde van een pijplijnuitvoering kunt u uw opslagplaats bijwerken met de nieuwe versie. In deze YAML is er een GitHub-opslagplaats en wordt het pakket geïmplementeerd in npmjs. Uw build mislukt als uw pakketversie niet overeenkomt met de pakketversie op npmjs en uw package.json bestand.

variables:
    MAP_NPMTOKEN: $(NPMTOKEN) # Mapping secret var

trigger:
- none

pool:
  vmImage: 'ubuntu-latest'

steps: # Checking out connected repo
- checkout: self
  persistCredentials: true
  clean: true
    
- task: npmAuthenticate@0
  inputs:
    workingFile: .npmrc
    customEndpoint: 'my-npm-connection'
    
- task: UseNode@1
  inputs:
    version: '16.x'
  displayName: 'Install Node.js'

- script: |
    npm install
  displayName: 'npm install'

- script: |
    npm pack
  displayName: 'Package for release'

- bash: | # Grab the package version
    v=`node -p "const p = require('./package.json'); p.version;"`
    echo "##vso[task.setvariable variable=packageVersion]$v"

- task: CopyFiles@2
  inputs:
      contents: '*.tgz'
      targetFolder: $(Build.ArtifactStagingDirectory)/npm
  displayName: 'Copy archives to artifacts staging directory'

- task: CopyFiles@2
  inputs:
    sourceFolder: '$(Build.SourcesDirectory)'
    contents: 'package.json' 
    targetFolder: $(Build.ArtifactStagingDirectory)/npm
  displayName: 'Copy package.json'

- task: PublishBuildArtifacts@1 
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/npm'
    artifactName: npm
  displayName: 'Publish npm artifact'

- script: |  # Config can be set in .npmrc
    npm config set //registry.npmjs.org/:_authToken=$(MAP_NPMTOKEN) 
    npm config set scope "@myscope"
    # npm config list
    # npm --version
    npm version patch --force
    npm publish --access public

- task: CmdLine@2 # Push changes to GitHub (substitute your repo)
  inputs:
    script: |
      git config --global user.email "username@contoso.com"
      git config --global user.name "Azure Pipeline"
      git add package.json
      git commit -a -m "Test Commit from Azure DevOps"
      git push -u origin HEAD:main