Použití oborů Npm v Azure Artifacts

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

Obory Npm slouží jako prostředek pro kategorizaci souvisejících balíčků do skupin. Tyto obory umožňují vytvářet balíčky se stejnými názvy, které vytvořili různí uživatelé, aniž by došlo ke konfliktům. Pomocí oborů máte možnost oddělit veřejné a privátní balíčky přidáním předpony oboru @scopeName a konfigurací souboru .npmrc výhradně používat informační kanál s tímto konkrétním oborem.

Azure Artifacts poskytuje možnost publikovat a stahovat jak omezené balíčky, tak balíčky bez rozsahu z informačních kanálů nebo veřejných registrů. Rozsahy npm jsou zvláště cenné při práci s místními místními servery, které nemají přístup k internetu, protože konfigurace nadřazených zdrojů v takových scénářích není možná. V souhrnu platí, že při použití oborů:

  • Nemusíme se starat o kolize názvů.
  • Aby bylo možné nainstalovat nebo publikovat naše balíčky, nemusíte měnit registr npm.
  • Každá organizace nebo uživatel npm má vlastní obor a pouze vlastník nebo členové oboru můžou publikovat balíčky do svého oboru.

Nastavení projektu

  1. Přihlaste se ke své organizaci Azure DevOps a přejděte k projektu.

  2. Vyberte Artifacts (Artefakty) a pak vyberte Připojení to feed (Informační kanál).

    Snímek obrazovky znázorňující, jak se připojit k informačnímu kanálu

  3. Vyberte npm a pak vyberte Jiné.

  4. .npmrc Přidejte soubor do stejného adresáře jako package.json a vložte do souboru následující fragment kódu.

    • Informační kanál s oborem organizace:

      registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/
      
      always-auth=true
      
    • Informační kanál s oborem projektu:

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

Nastavení přihlašovacích údajů

  1. Zkopírujte následující fragment kódu do souboru na úrovni .npmrc uživatele (příklad: C:\Users\FabrikamUser.npmrc). Ujistěte se, že ho nevklonujete do souboru .npmrc ve zdrojovém úložišti.

    • Informační kanál s oborem organizace:

      ; 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
      
    • Informační kanál s oborem projektu:

      ; 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. Vygenerujte osobní přístupový token s obory čtení a zápisu balíčku>.

  3. Spuštěním následujícího příkazu zakódujte nově vygenerovaný token pat. Po zobrazení výzvy vložte osobní přístupový token a zkopírujte výslednou hodnotu zakódovanou v base64.

    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 Otevřete soubor a nahraďte zástupný symbol [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] zakódovaným tokenem patového přístupu, který jste právě vytvořili.

Nastavení oboru

V souboru .npmrc nahraďte registry=<YOUR_SOURCE_URL> příponou @ScopeName:registry=<YOUR_SOURCE_URL>.

Nezapomeňte do souboru package.json zahrnout názvy oborů i balíčků následujícím způsobem: { "name": "@ScopeName/PackageName" }. Podívejte se na následující příklady:

  • Informační kanál s oborem organizace:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
    "name": "@ScopeName/PackageName" 
    }
    
  • Informační kanál s oborem projektu:

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

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

Publikování balíčků s vymezeným oborem

Otevřete okno příkazového řádku, přejděte do adresáře projektu a spuštěním následujícího příkazu publikujte balíček s vymezeným oborem. V našem příkladu @local je náš balíček uvedený v zobrazení.

npm publish

Snímek obrazovky znázorňující balíček s vymezeným oborem v informačním kanálu Azure Artifacts

Upstreamové zdroje vs. obory

Upstreamové zdroje poskytují největší flexibilitu při používání kombinace vymezených a neskopovaných balíčků ve vašem informačním kanálu i balíčků s vymezeným oborem i neskopovanými balíčky z veřejných registrů, jako je npmjs.com.

Obory však pro vaše balíčky ukládají omezení pojmenování: každý název balíčku musí začínat na @<scope>. Pokud chcete publikovat privátní balíčky do veřejných registrů, musíte to udělat s obory beze změny. Pokud při nasazování balíčků odeberete obory balíčků, budete muset aktualizovat všechny odkazy v souboru package.json . S ohledem na to můžou obory sloužit jako realizovatelná alternativa k nadřazeným zdrojům.