Delen via


Npm-bereiken gebruiken in Azure Artifacts

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

Npm-bereiken dienen als een middel om gerelateerde pakketten in groepen te categoriseren. Met deze scopes kunt u pakketten maken met dezelfde namen als die door verschillende gebruikers zonder conflicten. Met behulp van scopes hebt u de mogelijkheid om openbare en privé-pakketten te scheiden door het scopevoorvoegsel @scopeName toe te voegen en het .npmrc-bestand te configureren om uitsluitend een feed met die specifieke scope te gebruiken.

Azure Artifacts biedt de mogelijkheid om zowel beperkte als onbeperkte pakketten te publiceren en te downloaden vanuit 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 scopes 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.

Projectopstelling

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

  2. Selecteer Artefactenen selecteer vervolgens Verbinding maken met feed.

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

  3. Selecteer npm en selecteer Overige.

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

    • Feed voor de gehele organisatie:

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

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

Inloggegevens 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 voor de gehele organisatie:

      ; 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
      
    • Projectgebaseerde feed

      ; 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 >.

  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(); })"
    

    Opmerking

    Vanaf juli 2024 zijn Azure DevOps Personal Access Tokens (PAT's) 82 tekens lang. Sommige hulpprogramma's kunnen automatische regeleinden invoegen bij het coderen van tokens naar Base64. Om dit te voorkomen, gebruikt u de -w0 vlag met de base64-opdracht om ervoor te zorgen dat de uitvoer op één regel blijft. In deze zelfstudie gebruiken we de buffermethode van Node, die standaard een base64-tekenreeks met één regel produceert.

  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 je .npmrc-bestand registry=<YOUR_SOURCE_URL> met @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 voor de gehele organisatie:

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

    @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 commandoregelvenster, navigeer naar je projectmap en voer de volgende opdracht uit om je omlijnd pakket te publiceren. In ons voorbeeld wordt ons pakket weergegeven onder de @local weergave.

npm publish

Een screenshot van een scoped package in een Azure Artifacts-feed.

Upstream-bronnen versus reikwijdten

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

Scopes 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 scopes 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 reikwijdten dienen als een levensvatbaar alternatief voor upstream-bronnen.