Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
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 zdefiniowanym zakresie i bez zakresu z źródeł 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.
Konfiguracja projektu
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz Artifacts, a następnie wybierz Connect to feed.
Wybierz npm, a następnie wybierz Inne.
Dodaj plik
.npmrcw tym samym katalogu co package.jsoni wklej następujący fragment kodu do pliku.Kanał informacyjny o zasięgu organizacyjnym:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/ always-auth=trueKanał informacyjny w zakresie projektu:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
Konfigurowanie poświadczeń
Skopiuj następujący fragment kodu do pliku
.npmrcna poziomie użytkownika (przykład: C:\Users\FabrikamUser.npmrc). Upewnij się, że nie wklejasz go do pliku npmrc w repozytorium źródłowym.Kanał informacyjny o zasięgu organizacyjnym:
; 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 tokenKanał informacyjny w 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
Wygeneruj osobisty token dostępu z zakresami Packaging>Read & write.
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(); })"Uwaga / Notatka
Od lipca 2024 r. osobiste tokeny dostępu (PATs) usługi Azure DevOps mają długość 82 znaków. Niektóre narzędzia mogą wstawiać automatyczne podziały wierszy podczas kodowania tokenów do base64. Aby tego uniknąć, użyj
-w0flagi z poleceniem base64 , aby upewnić się, że dane wyjściowe pozostają w jednym wierszu. W tym samouczku użyjemy metody Bufor węzła, która domyślnie tworzy ciąg Base64 jednowierszowy.Otwórz plik
.npmrci zastąp symbol zastępczy[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]zakodowanym osobistym tokenem dostępu.
Konfiguracja zakresu
W pliku npmrc zastąp registry=<YOUR_SOURCE_URL>@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 zasięgu organizacyjnym:
@ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true{ "name": "@ScopeName/PackageName" }Kanał informacyjny w 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 widoku @local.
npm publish
Źródła nadrzędne a zakresy
Źródła nadrzędne zapewniają największą elastyczność korzystania z kombinacji pakietów z zdefiniowanym zakresem i niezdefiniowanym zakresem w Twoim źródle, a także pakietów z zdefiniowanym zakresem i niezdefiniowanym zakresem 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 zachowanymi zakresami. 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ł.