Npm-bereiken gebruiken om pakketten te beheren in Azure Artifact

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

NPM-bereiken helpen gerelateerde pakketten in groepen te categoriseren. Hiermee kunt u pakketten maken met dezelfde namen als pakketten die door andere gebruikers zijn gemaakt zonder conflicten. Door scopes te gebruiken, kunt u openbare en privépakketten scheiden door het scopevoorvoegsel @scopeName toe te voegen en het bestand .npmrc te configureren voor het gebruik van een feed met die scope.

Azure-artefacten ondersteunt het publiceren en downloaden van zowel scoped als unscoped pakketten uit feeds of openbare pakketregisters. npm-bereiken zijn vooral handig wanneer u werkt met zelf-hostende on-premises servers die geen internettoegang hebben, omdat het configureren van upstreambronnen in deze scenario's niet haalbaar is. Kortom, als u scopes gebruikt:

  • U hoeft zich geen zorgen te maken over naamconflicten.
  • U hoeft het npm-register niet te wijzigen om pakketten te installeren of te publiceren.
  • Elke npm-organisatie of gebruiker heeft een eigen bereik en alleen de eigenaar of bereikleden kunnen pakketten naar dat bereik publiceren.

Prerequisites

Product Requirements
Azure DevOps - Een Azure DevOps organisatie.
- Een Azure DevOps project.
- Een Azure-artefacten feed.
- Download en installeer Node.js en npm.

Verbinding maken met uw feed

Voordat u npm-bereiken configureert, verbindt u uw project met uw Azure-artefacten feed. Zorg ervoor dat u aan de vereisten voldoet en een feed maakt en volg deze stappen.

Azure-artefacten raadt het gebruik van twee afzonderlijke NPMRC-bestanden aan. Bewaar één bestand in uw gebruikersmap om uw referenties op te slaan en bewaar het tweede bestand in dezelfde map als uw package.json-bestand om uw feedspecifieke configuratie op te slaan.

  1. Meld u aan bij Azure DevOps en ga naar uw project.

  2. Selecteer Artefacten en selecteer vervolgens uw feed in de vervolgkeuzelijst.

  3. Selecteer Verbinding maken met feed en selecteer vervolgens npm in het linkernavigatiedeelvenster.

  4. Als dit de eerste keer is dat u Azure-artefacten met npm gebruikt, selecteert u De hulpprogramma's ophalen en volgt u de instructies om de vereisten voor uw besturingssysteem te installeren. U moet eerst Node.js en npm installeren. Installeer vervolgens, afhankelijk van uw besturingssysteem, vsts-npm-auth voor Windows of configureer referenties voor niet-Windows omgevingen. Raadpleeg voor niet-Windows-instructies Verbinding maken met een feed - Overige.

  5. Maak een NPMRC-bestand in dezelfde map als het package.json-bestand en plak het fragment uit de sectie Project setup in dat bestand.

  6. Voer op Windows de volgende opdracht uit om een Azure-artefacten token toe te voegen aan uw NPMRC-bestand op gebruikersniveau. U hoeft deze opdracht niet elke keer uit te voeren. Wanneer het token verloopt, retourneert npm een fout 401 Niet-geautoriseerd om aan te geven dat het tijd is om het te vernieuwen.

vsts-npm-auth -config .npmrc

Opmerking

vsts-npm-authwordt niet ondersteund in Azure DevOps Server. Zie Verbinding maken met een feed - Overige voor niet-Windows-richtlijnen.

Bereik instellen

Als u scopes wilt gebruiken met Azure-artefacten, werkt u het project .npmrc-bestand bij, zodat de pakketten met een scope die u publiceert of installeert, via uw feed worden opgehaald. Vervang registry=<YOUR_SOURCE_URL> door @ScopeName:registry=<YOUR_SOURCE_URL>.

Werk uw package.json bestand ook bij om zowel de bereiknaam als de pakketnaam op te nemen, bijvoorbeeld: { "name": "@ScopeName/PackageName" }. In de volgende voorbeelden ziet u hoe u feeds met organisatiebereik en projectbereik configureert.

  • Feed voor de gehele organisatie:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    {
      "name": "@ScopeName/PackageName"
    }
    
  • Projectgebaseerde feed

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    {
      "name": "@ScopeName/PackageName"
    }
    

Example

  • Het .npmrc-bestand :

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
  • Het bestand package.json:

    {
      "name": "@demo/js-e2e-express-server",
      "version": "2.0.0",
      "description": "JavaScript server written with Express.js",
      "main": "index.js",
      "directories": {
        "doc": "docs",
        "test": "test"
      }
    }
    

Scoped pakketten publiceren

Nadat u het bereik hebt geconfigureerd en uw projectbestanden hebt bijgewerkt, opent u een opdrachtpromptvenster, gaat u naar de projectmap en voert u de volgende opdracht uit om het bereikpakket te publiceren. In het vorige voorbeeld wordt het pakket gepubliceerd onder de @local scope.

npm publish

Upstream-bronnen versus reikwijdten

Upstream-bronnen bieden de meeste flexibiliteit. Met behulp van upstream-bronnen kunt u zowel scoped als unscoped pakketten van uw Azure-artefacten feed gebruiken, terwijl u ook pakketten van openbare registers zoals npmjs.com gebruikt. Deze aanpak werkt goed wanneer u wilt dat één feed fungeert als de hoofdbron voor zowel interne pakketten als goedgekeurde externe afhankelijkheden.

Scopes zijn beperkter, maar ze kunnen in de juiste situatie nog steeds een praktische optie zijn. Wanneer u scopes gebruikt, moet elke pakketnaam beginnen met @<scope>, wat betekent dat u die naamconventie in al uw pakketten moet hanteren en behouden. Als u bijvoorbeeld een pakket publiceert als @local/my-package, moet u die naam met bereik blijven gebruiken overal waar naar het pakket wordt verwezen.

Deze vereiste kan overhead toevoegen, vooral als u van plan bent om dezelfde pakketten later naar een openbaar register te publiceren. Als u scopes verwijdert wanneer u uw pakketten uitrolt, moet u ook de bijbehorende verwijzingen in uw package.json-bestanden en alle afhankelijke projecten bijwerken.

Zelfs met die beperkingen kunnen scopes een haalbaar alternatief zijn wanneer upstream-bronnen geen praktische optie zijn. Dit geldt met name in geïsoleerde of zelf-hostende omgevingen waarbij de toegang tot openbare registers niet beschikbaar is en u wilt voorkomen dat pakketnaamconflicten ontstaan terwijl pakketten in uw feed georganiseerd blijven.