Zarządzanie pakietami w usłudze Azure Artifact za pomocą zakresów npm

Usługi Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Zakresy npm ułatwiają kategoryzowanie powiązanych pakietów w grupach. Umożliwiają one tworzenie pakietów o takich samych nazwach jak pakiety utworzone przez innych użytkowników bez konfliktów. Korzystając z zakresów, można oddzielić pakiety publiczne i prywatne, dodając prefiks zakresu @scopeName i konfigurując .npmrc plik do używania źródła danych z tym zakresem.

Azure Artifacts obsługuje publikowanie i pobieranie zarówno pakietów o określonym zakresie, jak i niezakresowych z kanałów informacyjnych lub publicznych rejestrów. Zakresy npm są szczególnie przydatne, gdy pracujesz z własnymi serwerami lokalnymi, które nie mają dostępu do Internetu, ponieważ konfigurowanie nadrzędnych źródeł w tych scenariuszach nie jest możliwe. Podsumowując, gdy używasz zakresów:

  • Nie musisz martwić się o kolizje nazw.
  • Nie musisz zmieniać rejestru npm, aby instalować ani publikować pakietów.
  • Każda organizacja lub każdy użytkownik npm ma własną przestrzeń nazw, a pakiety w tej przestrzeni nazw może publikować tylko właściciel lub jej członkowie.

Prerequisites

produkt Wymagania
Azure DevOps — Organizacja usługi Azure DevOps .
- Azure DevOps project.
- Azure Artifacts feed.
- Pobierz i zainstaluj Node.js i npm.

Połącz się ze swoim kanałem

Przed skonfigurowaniem zakresów npm połącz projekt z kanałem informacyjnym Azure Artifacts. Upewnij się, że zostały spełnione wymagania wstępne i utworzono kanał informacyjny, a następnie wykonaj następujące kroki.

Azure Artifacts zaleca używanie dwóch oddzielnych plików npmrc. Przechowuj jeden plik w swoim katalogu użytkownika, aby zapisać poświadczenia, a drugi plik w tym samym katalogu co plik package.json, aby zapisać konfigurację specyficzną dla źródła.

  1. Zaloguj się do Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz pozycję Artefakty, a następnie wybierz swój kanał z menu rozwijanego.

  3. Wybierz pozycję Połącz z kanałem informacyjnym, a następnie wybierz pozycję npm w okienku nawigacji po lewej stronie.

  4. Jeśli używasz Azure Artifacts za pomocą narzędzia npm po raz pierwszy, wybierz pozycję Pobierz narzędzia i postępuj zgodnie z instrukcjami, aby zainstalować wymagania wstępne dotyczące systemu operacyjnego. Najpierw należy zainstalować Node.js i narzędzie npm. Następnie, w zależności od systemu operacyjnego, zainstaluj vsts-npm-auth dla Windows lub skonfiguruj poświadczenia dla środowisk innych niż Windows. Aby uzyskać wskazówki dotyczące systemów innych niż Windows, zobacz Nawiązywanie połączenia ze źródłem — inne systemy.

  5. Utwórz plik npmrc w tym samym katalogu co plik package.json, a następnie wklej fragment kodu z sekcji konfiguracji Project do tego pliku.

  6. Na Windows uruchom następujące polecenie, aby dodać token Azure Artifacts do pliku npmrc na poziomie użytkownika. Nie trzeba uruchamiać tego polecenia za każdym razem. Po wygaśnięciu tokenu narzędzie npm zwraca błąd 401 Brak autoryzacji , aby wskazać, że nadszedł czas na jego odświeżenie.

vsts-npm-auth -config .npmrc

Note

vsts-npm-authnie jest obsługiwany w Azure DevOps Server. Aby uzyskać wskazówki dotyczące systemów innych niż Windows, zobacz Łączenie ze źródłem danych — inne.

Konfiguracja zakresu

Aby używać zakresów z usługą Azure Artifacts, zaktualizuj plik .npmrc w swoim projekcie, aby pakiety o tych zakresach, które publikujesz lub instalujesz, były rozpoznawane za pośrednictwem Twojego źródła danych. Zamień registry=<YOUR_SOURCE_URL> na @ScopeName:registry=<YOUR_SOURCE_URL>.

Zaktualizuj również plik package.json , aby zawierał zarówno nazwę zakresu, jak i nazwę pakietu, na przykład: { "name": "@ScopeName/PackageName" }. Poniższe przykłady pokazują, jak skonfigurować kanały informacyjne na poziomie organizacji i na poziomie projektu.

  • Kanał informacyjny o zasięgu organizacyjnym:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    {
      "name": "@ScopeName/PackageName"
    }
    
  • Kanał informacyjny w zakresie projektu:

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

Example

  • Plik npmrc :

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
  • Plik package.json :

    {
      "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

Po skonfigurowaniu zakresu i zaktualizowaniu plików projektu otwórz okno wiersza polecenia, przejdź do katalogu projektu i uruchom następujące polecenie, aby opublikować pakiet o określonym zakresie. W poprzednim przykładzie pakiet jest opublikowany w zakresie @local.

npm publish

Źródła nadrzędne a zakresy

Źródła nadrzędne zapewniają największą elastyczność. Korzystając ze źródeł nadrzędnych, można korzystać zarówno z pakietów o określonym zakresie, jak i niezakresowych z kanału informacyjnego Azure Artifacts, a jednocześnie używać pakietów z publicznych rejestrów, takich jak npmjs.com. Takie podejście dobrze sprawdza się, gdy chcesz, aby pojedyncze źródło danych działało jako główne źródło zarówno pakietów wewnętrznych, jak i zatwierdzonych zależności zewnętrznych.

Zakresy są bardziej restrykcyjne, ale nadal mogą być praktycznymi opcjami w odpowiednim scenariuszu. Jeśli używasz zakresów, każda nazwa pakietu musi zaczynać się od @<scope>, co oznacza, że musisz przyjąć i zachować tę konwencję nazewnictwa w pakietach. Jeśli na przykład opublikujesz pakiet jako @local/my-package, musisz nadal używać tej nazwy o określonym zakresie w dowolnym miejscu, do którego odwołuje się pakiet.

To wymaganie może zwiększyć obciążenie, zwłaszcza jeśli planujesz później opublikować te same pakiety w rejestrze publicznym. W przypadku usuwania zakresów podczas wdrażania pakietów należy również zaktualizować odpowiednie odwołania w plikach package.json i wszelkich projektach zależnych.

Nawet w przypadku tych ograniczeń zakresy mogą służyć jako realna alternatywa, gdy źródła nadrzędne nie są praktyczne. Jest to szczególnie istotne w izolowanych lub hostowanych samodzielnie środowiskach, w których nie ma dostępu do publicznych rejestrów, a chcesz uniknąć kolizji nazw pakietów, jednocześnie zachowując porządek w repozytorium.