Använda Npm-omfång i Azure Artifacts

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Npm-omfång fungerar som ett sätt att kategorisera relaterade paket i grupper. Med de här omfången kan du skapa paket med identiska namn som de som skapats av olika användare utan konflikter. Genom att använda omfång har du möjlighet att separera offentliga och privata paket genom att lägga till omfångsprefixet @scopeName och konfigurera .npmrc-filen för att uteslutande använda ett flöde med det specifika omfånget.

Azure Artifacts ger möjlighet att publicera och ladda ned både begränsade och icke-begränsade paket från feeds eller offentliga register. Npm-omfång är särskilt värdefulla när du arbetar med lokalt installerade lokala servrar som saknar Internetåtkomst, eftersom det inte är möjligt att konfigurera överordnade källor i sådana scenarier. Sammanfattningsvis när du använder omfång:

  • Vi behöver inte oroa oss för namnkollisioner.
  • Du behöver inte ändra npm-registret för att installera eller publicera våra paket.
  • Varje npm-organisation/användare har ett eget omfång, och endast ägaren eller omfångsmedlemmarna kan publicera paket till sitt omfång.

Projektinställningar

  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Artefakter och välj sedan Anslut som ska matas.

    En skärmbild som visar hur du ansluter till en feed.

  3. Välj npm och välj sedan Övrigt.

  4. Lägg till en .npmrc fil i samma katalog som din package.json och klistra in följande kodfragment i filen.

    • Flöde med organisationsomfattning:

      registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/
      
      always-auth=true
      
    • Flöde med projektomfattning:

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

Konfigurera autentiseringsuppgifter

  1. Kopiera följande kodfragment till filen på användarnivå .npmrc (exempel: C:\Users\FabrikamUser.npmrc). Se till att du inte klistrar in den i .npmrc-filen i källlagringsplatsen.

    • Flöde med organisationsomfattning:

      ; 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
      
    • Flöde med projektomfattning:

      ; 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. Generera en personlig åtkomsttoken med omfång för att paketera>läs- och skrivomfattningar.

  3. Kör följande kommando för att koda din nyligen genererade personliga åtkomsttoken. När du uppmanas till det klistrar du in din personliga åtkomsttoken och kopierar sedan det resulterande Base64-kodade värdet.

    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. .npmrc Öppna filen och ersätt platshållaren [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] med din kodade personliga åtkomsttoken som du nyss skapade.

Omfångskonfiguration

I .npmrc-filen ersätter du registry=<YOUR_SOURCE_URL> med @ScopeName:registry=<YOUR_SOURCE_URL>.

Se till att inkludera både omfångs- och paketnamnen i package.json-filen på följande sätt: { "name": "@ScopeName/PackageName" }. Se exemplen nedan:

  • Flöde med organisationsomfattning:

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

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

    @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"
      }
    

Publicera begränsade paket

Öppna ett kommandotolkfönster, navigera till projektkatalogen och kör följande kommando för att publicera ditt omfångspaket. I vårt exempel visas vårt paket under @local vyn.

npm publish

En skärmbild som visar ett omfångspaket i en Azure Artifacts-feed.

Överordnade källor jämfört med omfång

Uppströmskällor ger dig mest flexibilitet att använda en kombination av begränsade och icke-begränsade paket i ditt flöde, samt både begränsade och icke-begränsade paket från offentliga register som npmjs.com.

Omfång medför dock en namngivningsbegränsning för dina paket: varje paketnamn måste börja med @<scope>. Om du vill publicera dina privata paket till offentliga register måste du göra det med omfången intakta. Om du tar bort paketomfattningar när du distribuerar paketen måste du uppdatera alla referenser i filen package.json . Med det i åtanke kan omfång fungera som ett genomförbart alternativ till överordnade källor.