Npm-bereiken gebruiken in Azure Artifacts
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Npm-bereiken dienen als een middel om gerelateerde pakketten in groepen te categoriseren. Met deze bereiken kunt u pakketten met identieke namen maken die zijn gemaakt door verschillende gebruikers zonder conflicten. Met behulp van bereiken hebt u de mogelijkheid om openbare en persoonlijke pakketten te scheiden door het bereikvoorvoegsel @scopeName toe te voegen en het NPMRC-bestand te configureren om uitsluitend een feed met dat specifieke bereik te gebruiken.
Azure Artifacts biedt de mogelijkheid om zowel scoped als niet-scoped pakketten te publiceren en te downloaden van feeds of openbare registers. Npm-bereiken zijn met name waardevol bij het werken met zelf-hostende on-premises servers die geen internettoegang hebben, omdat het configureren van upstreambronnen in dergelijke scenario's niet haalbaar is. Kortom, wanneer u bereiken gebruikt:
- We hoeven ons geen zorgen te maken over naamconflicten.
- U hoeft het npm-register niet te wijzigen om onze pakketten te installeren of te publiceren.
- Elke npm-organisatie/gebruiker heeft een eigen bereik en alleen de eigenaar of de bereikleden kunnen pakketten publiceren naar hun bereik.
Projectinstellingen
Meld u aan bij uw Azure DevOps-organisatie en navigeer vervolgens naar uw project.
Selecteer Artefacten en selecteer vervolgens Verbinding maken die u wilt invoeren.
Selecteer npm en selecteer Vervolgens Overige.
Voeg een
.npmrc
bestand toe in dezelfde map als uw package.json en plak het volgende fragment in het bestand.Feed met organisatiebereik:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
Feed met projectbereik:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
Referenties instellen
Kopieer het volgende codefragment naar het bestand op gebruikersniveau
.npmrc
(bijvoorbeeld: C:\Users\FabrikamUser.npmrc). Zorg ervoor dat u het niet in het NPMRC-bestand in uw bronopslagplaats plakt.Feed met organisatiebereik:
; 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
Feed met projectbereik:
; 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
Genereer een persoonlijk toegangstoken met lees- en schrijfbereiken voor pakketten>.
Voer de volgende opdracht uit om het zojuist gegenereerde persoonlijke toegangstoken te coderen. Wanneer u hierom wordt gevraagd, plakt u uw persoonlijke toegangstoken en kopieert u vervolgens de resulterende base64-gecodeerde waarde.
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(); })"
Open het
.npmrc
bestand en vervang de tijdelijke aanduiding[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
door uw gecodeerde persoonlijke toegangstoken dat u zojuist hebt gemaakt.
Bereik instellen
Vervang in het .npmrc-bestand door registry=<YOUR_SOURCE_URL>
@ScopeName:registry=<YOUR_SOURCE_URL>
.
Zorg ervoor dat u zowel de bereik- als pakketnamen in uw package.json-bestand als volgt opneemt: { "name": "@ScopeName/PackageName" }
Zie de onderstaande voorbeelden:
Feed met organisatiebereik:
@ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
{ "name": "@ScopeName/PackageName" }
Feed met projectbereik:
@ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
{ "name": "@ScopeName/PackageName" }
Voorbeeld:
@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" }
Scoped pakketten publiceren
Open een opdrachtpromptvenster, navigeer naar de projectmap en voer de volgende opdracht uit om het bereikpakket te publiceren. In ons voorbeeld wordt ons pakket weergegeven onder de @local weergave.
npm publish
Upstream-bronnen versus bereiken
Upstream-bronnen bieden u de meeste flexibiliteit om een combinatie van scoped en niet-scoped pakketten in uw feed te gebruiken, evenals zowel scoped als niet-bereikpakketten van openbare registers, zoals npmjs.com.
Bereiken leggen echter een naambeperking op voor uw pakketten: elke pakketnaam moet beginnen met @<scope>
. Als u uw privépakketten wilt publiceren naar openbare registers, moet u dit doen met de bereiken intact. Als u pakketbereiken verwijdert bij het implementeren van uw pakketten, moet u alle verwijzingen in uw package.json-bestand bijwerken. Met dat in gedachten kunnen bereiken fungeren als een levensvatbaar alternatief voor upstream-bronnen.