Udostępnij za pośrednictwem


Używanie zakresów Npm w usłudze Azure Artifacts

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Zakresy npm służą jako środek do kategoryzowania powiązanych pakietów w grupach. Te zakresy umożliwiają tworzenie pakietów o identycznych nazwach dla tych utworzonych przez różnych użytkowników bez napotykania konfliktów. Korzystając z zakresów, można segregować pakiety publiczne i prywatne przez dodanie prefiksu zakresu @scopeName i skonfigurowanie pliku npmrc w celu wyłącznego używania kanału informacyjnego z tym określonym zakresem.

Usługa Azure Artifacts zapewnia możliwość publikowania i pobierania pakietów o określonym zakresie i niezakresowych z kanałów informacyjnych lub publicznych rejestrów. Zakresy npm są szczególnie przydatne podczas pracy z własnymi serwerami lokalnymi, które nie mają dostępu do Internetu, ponieważ konfigurowanie nadrzędnych źródeł w takich scenariuszach nie jest możliwe. Podsumowując, w przypadku korzystania z zakresów:

  • Nie musimy martwić się o kolizje nazw.
  • Nie trzeba zmieniać rejestru npm, aby zainstalować lub opublikować nasze pakiety.
  • Każda organizacja/użytkownik npm ma własny zakres, a tylko właściciel lub członkowie zakresu mogą publikować pakiety w ich zakresie.

Ustawienia projektu

  1. Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz pozycję Artefakty, a następnie wybierz pozycję Połączenie do kanału informacyjnego.

    Zrzut ekranu przedstawiający sposób nawiązywania połączenia z kanałem informacyjnym.

  3. Wybierz pozycję npm, a następnie wybierz pozycję Inne.

  4. .npmrc Dodaj plik w tym samym katalogu co package.json i wklej następujący fragment kodu do pliku.

    • Kanał informacyjny o zakresie organizacji:

      registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/
      
      always-auth=true
      
    • Źródło danych o zakresie projektu:

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

Konfigurowanie poświadczeń

  1. Skopiuj następujący fragment kodu do pliku na poziomie .npmrc użytkownika (na przykład: C:\Users\FabrikamUser.npmrc). Upewnij się, że nie wklejasz go do pliku npmrc w repozytorium źródłowym.

    • Kanał informacyjny o zakresie organizacji:

      ; 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
      
    • Źródło danych o zakresie 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. Wygeneruj osobisty token dostępu przy użyciu zakresów odczytu i zapisu pakietów>.

  3. Uruchom następujące polecenie, aby zakodować nowo wygenerowany osobisty token dostępu. Po wyświetleniu monitu wklej osobisty token dostępu, a następnie skopiuj wynikową wartość zakodowaną w formacie 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 Otwórz plik i zastąp symbol zastępczy [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] zakodowanym osobistym tokenem dostępu, który właśnie został utworzony.

Konfiguracja zakresu

W pliku npmrc zastąp ciąg registry=<YOUR_SOURCE_URL> ciągiem @ScopeName:registry=<YOUR_SOURCE_URL>.

Pamiętaj, aby uwzględnić zarówno nazwy zakresu, jak i pakietów w pliku package.json w następujący sposób: { "name": "@ScopeName/PackageName" }. Zapoznaj się z poniższymi przykładami:

  • Kanał informacyjny o zakresie organizacji:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
    "name": "@ScopeName/PackageName" 
    }
    
  • Źródło danych o zakresie projektu:

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

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

Publikowanie pakietów o określonym zakresie

Otwórz okno wiersza polecenia, przejdź do katalogu projektu i uruchom następujące polecenie, aby opublikować pakiet o określonym zakresie. W naszym przykładzie nasz pakiet jest wyświetlany w @local widoku.

npm publish

Zrzut ekranu przedstawiający pakiet o określonym zakresie w kanale informacyjnym usługi Azure Artifacts.

Nadrzędne źródła a zakresy

Źródła nadrzędne zapewniają największą elastyczność korzystania z kombinacji pakietów o określonym zakresie i niezakresowych w kanale informacyjnym, a także pakietów o określonym zakresie i niezakresowych z publicznych rejestrów, takich jak npmjs.com.

Zakresy nakładają jednak ograniczenie nazewnictwa pakietów: każda nazwa pakietu musi zaczynać się od @<scope>. Jeśli chcesz opublikować pakiety prywatne w publicznych rejestrach, musisz to zrobić z zakresami nienaruszonymi. Jeśli usuniesz zakresy pakietów podczas wdrażania pakietów, musisz zaktualizować wszystkie odwołania w pliku package.json . Mając to na uwadze, zakresy mogą służyć jako realna alternatywa dla nadrzędnych źródeł.