Npm-bereiken gebruiken in Azure Artifacts

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Npm-bereiken dienen als een middel om gerelateerde pakketten in groepen te categoriseren. Met deze bereiken kunt u pakketten met identieke namen maken die zijn gemaakt door verschillende gebruikers zonder conflicten. Met behulp van bereiken hebt u de mogelijkheid om openbare en persoonlijke pakketten te scheiden door het bereikvoorvoegsel @scopeName toe te voegen en het NPMRC-bestand te configureren om uitsluitend een feed met dat specifieke bereik te gebruiken.

Azure Artifacts biedt de mogelijkheid om zowel scoped als niet-scoped pakketten te publiceren en te downloaden van feeds of openbare registers. Npm-bereiken zijn met name waardevol bij het werken met zelf-hostende on-premises servers die geen internettoegang hebben, omdat het configureren van upstreambronnen in dergelijke scenario's niet haalbaar is. Kortom, wanneer u bereiken gebruikt:

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

Projectinstellingen

  1. Meld u aan bij uw Azure DevOps-organisatie en navigeer vervolgens naar uw project.

  2. Selecteer Artefacten en selecteer vervolgens Verbinding maken die u wilt invoeren.

    Een schermopname die laat zien hoe u verbinding maakt met een feed.

  3. Selecteer npm en selecteer Vervolgens Overige.

  4. Voeg een .npmrc bestand toe in dezelfde map als uw package.json en plak het volgende fragment in het bestand.

    • Feed met organisatiebereik:

      registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/
      
      always-auth=true
      
    • Feed met projectbereik:

      registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
      
      always-auth=true
      

Referenties instellen

  1. Kopieer het volgende codefragment naar het bestand op gebruikersniveau .npmrc (bijvoorbeeld: C:\Users\FabrikamUser.npmrc). Zorg ervoor dat u het niet in het NPMRC-bestand in uw bronopslagplaats plakt.

    • Feed met organisatiebereik:

      ; begin auth token
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:username=[ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
      ; end auth token
      
    • Feed met projectbereik:

      ; begin auth token
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
      //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
      ; end auth token
      
  2. Genereer een persoonlijk toegangstoken met lees- en schrijfbereiken voor pakketten>.

  3. Voer de volgende opdracht uit om het zojuist gegenereerde persoonlijke toegangstoken te coderen. Wanneer u hierom wordt gevraagd, plakt u uw persoonlijke toegangstoken en kopieert u vervolgens de resulterende base64-gecodeerde waarde.

    node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
    
  4. Open het .npmrc bestand en vervang de tijdelijke aanduiding [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] door uw gecodeerde persoonlijke toegangstoken dat u zojuist hebt gemaakt.

Bereik instellen

Vervang in het .npmrc-bestand door registry=<YOUR_SOURCE_URL>@ScopeName:registry=<YOUR_SOURCE_URL>.

Zorg ervoor dat u zowel de bereik- als pakketnamen in uw package.json-bestand als volgt opneemt: { "name": "@ScopeName/PackageName" } Zie de onderstaande voorbeelden:

  • Feed met organisatiebereik:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
    "name": "@ScopeName/PackageName" 
    }
    
  • Feed met projectbereik:

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

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
    always-auth=true
    
    {
      "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

Open een opdrachtpromptvenster, navigeer naar de projectmap en voer de volgende opdracht uit om het bereikpakket te publiceren. In ons voorbeeld wordt ons pakket weergegeven onder de @local weergave.

npm publish

Een schermopname met een bereikpakket in een Azure Artifacts-feed.

Upstream-bronnen versus bereiken

Upstream-bronnen bieden u de meeste flexibiliteit om een combinatie van scoped en niet-scoped pakketten in uw feed te gebruiken, evenals zowel scoped als niet-bereikpakketten van openbare registers, zoals npmjs.com.

Bereiken leggen echter een naambeperking op voor uw pakketten: elke pakketnaam moet beginnen met @<scope>. Als u uw privépakketten wilt publiceren naar openbare registers, moet u dit doen met de bereiken intact. Als u pakketbereiken verwijdert bij het implementeren van uw pakketten, moet u alle verwijzingen in uw package.json-bestand bijwerken. Met dat in gedachten kunnen bereiken fungeren als een levensvatbaar alternatief voor upstream-bronnen.