Is er een manier om meerdere registers in een enkel npmrc-bestand te configureren

Dit is mijn probleem. We hebben een privé NPM-register dat alleen werkt in VPN. Ik wil graag een reserveregister https://registry.npmjs.orghebben, zodat wanneer ik geen VPN meer heb het werkt naadloos.

PSMomenteel gebruik ik npmrcwat goed werkt bij het schakelen tussen .npmrc-bestanden als een tijdelijke oplossing


Antwoord 1, autoriteit 100%

U kunt meerdere registers hebben voor scoped packagesin uw .npmrc-bestand. Bijvoorbeeld:

@polymer:registry=<url register A>
registry=http://localhost:4873/

Pakketten onder het bereik van @polymerworden ontvangen van https://registry.npmjs.org, maar de rest ontvang je van je lokale NPM.


Antwoord 2, autoriteit 32%

Als u in versie 4.4.1 de pakketnaam kunt wijzigen, gebruikt u:

npm config set @myco:registry http://reg.example.com

Waar @mycouw pakketomvang is.

U kunt het pakket op deze manier installeren:

npm install @myco/my-package

Voor meer informatie: https://docs.npmjs.com/misc/scope


Antwoord 3, autoriteit 10%

Voor iedereen die ook op zoek is naar een oplossing voor authenticatie, zou ik aan de scoped packages-oplossing willen toevoegen dat je meerdere regels in je .npmrc-bestand kunt hebben:

//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy

Elke regel vertegenwoordigt een ander NPM-register


Antwoord 4, autoriteit 10%

Niet de beste manier, maar als je mac of linux gebruikt, zelfs in Windows, kun je een alias instellen voor verschillende registers.

##############NPM ALIASES######################
alias npm-default='npm config set registry https://registry.npmjs.org'
alias npm-sinopia='npm config set registry http://localhost:4873/'

Antwoord 5, autoriteit 5%

Ik denk dat het best gestemde antwoord misschien achterhaald is. Vanaf juni 2021is er een veel eenvoudigere manier om dit te doen met npmrc.

Raadpleeg npm Docs.

1. Installeer npmrc

Als u npmrc wilt installeren, voert u op de opdrachtregel uit:
npm i npmrc -g

2. Maak je eerste npm-profiel

Na het installeren van npmrc, kunt u een profiel maken om toegang te krijgen tot uw aangepaste (misschien bedrijfs)register.

Als u een npm Enterprise-profiel wilt maken, voert u op de opdrachtregel npmrc -c name-of-profileuit.
Als u bijvoorbeeld een profiel met de naam “work” wilt maken, voert u de volgende opdracht uit:
npmrc -c work

Als u een npm Enterprise-register voor het profiel wilt instellen, voert u de volgende opdracht uit en vervangt u your-company-registrydoor de naam van het npm Enterprise-register van uw bedrijf:

npm config set registry https://registry.your-company-registry.npme.io/

3. Maak een profiel aan voor het openbare npm-register

Nadat u uw npm Enterprise-profiel heeft gemaakt, kunt u een tweede profiel maken voor een ander register, zoals het openbare npm-register.

Als u een profiel voor het openbare register wilt maken, voert u op de opdrachtregel npmrc -c name-of-profileuit. Als u bijvoorbeeld een profiel met de naam “open-source” wilt maken, voert u npmrc -c open-sourceuit.
Voer de volgende opdracht uit om het openbare register voor uw open source-profiel in te stellen:
npm config set registry https://registry.npmjs.org/

4. Van profiel wisselen met npmrc

Als u van profiel wilt wisselen, voert u op de opdrachtregel de volgende opdracht uit, waarbij u profielnaam vervangt door de naam van uw profiel:

npmrc profile-name


Antwoord 6, autoriteit 4%

Aangezien het een paar jaar geleden is en het niet mogelijk lijkt om dit te doen (met alleen npm), is een oplossing voor dit probleem het gebruik van de Nexus Repository Manager(van Sonatype). Nexus ondersteunt meerdere repositories, laat je ze bestellen, en ook proxy’s/caches om de snelheid te verbeteren.

Er bestaat een gratis versie en een pro/betaalde versie. De functie die dit ondersteunt, wordt beschreven op:
https://help.sonatype.com/repomanager3/node-packaged -modules-en-npm-registers

De relevante informatie is hieronder gedupliceerd, dus als/wanneer de bovenstaande URL/link niet meer werkt, is de informatie er nog steeds.

Een repositorygroep is de aanbevolen manier om al uw npm-registerrepository’s van de repositorymanager beschikbaar te maken voor uw gebruikers, zonder dat er verdere configuratie aan de clientzijde nodig is. Met een repositorygroep kunt u de geaggregeerde inhoud van meerdere proxy- en gehoste repositories met één URL blootstellen aan npm en andere tools.

Hiermee kunt u privé-npm-registers maken

Een privé npm-register kan worden gebruikt om uw eigen pakketten en pakketten van derden te uploaden.

En

Om dubbele downloads te verminderen en downloadsnelheden voor uw ontwikkelaars en CI-servers te verbeteren, dient u het register te proxyen dat wordt gehost op https:// registry.npmjs.org. Standaard heeft npm rechtstreeks toegang tot dit register. Je kunt ook proxy’s gebruiken voor andere registers die je nodig hebt.

Dus een korte lijst met opsommingstekens van dingen die u doet om dit werkend te krijgen is:

  • Nexus installeren

  • Maak een lokale/privé-opslagplaats (of verwijs naar uw privé-opslagplaats op een andere server)

  • Maak een GROEP met uw privé-opslagplaats en de openbare opslagplaats.

  • Configureer uw $HOME/.npmrc-bestand zodat het verwijst naar de “GROUP” die zojuist is gemaakt.

  • Publiceer uw privé-npm-pakketten naar de lokale repo.

  • Gebruikers kunnen nu een eenmalige installatie uitvoeren.

npm config set registry https://nexus/content/groups/GROUP

  • Gebruikers kunnen vervolgens zowel openbare als privépakketten installeren via npm install.

    npm install my-private-package
    npm install lodash any-other-public-package

En zowel uw openbare als uw privépakketten kunnen worden geïnstalleerd via een eenvoudig npm install-commando. Nexus vindt het pakket door te zoeken in elke repo die in de groep is geconfigureerd en retourneert de resultaten. Dus npm denkt nog steeds dat er maar één register is, maar achter het gordijn worden meerdere repo’s gebruikt.

BELANGRIJKE OPMERKING: wanneer u uw componenten publiceert, moet u de opdracht npm publish --registry https://nexus/content/repositories/private-repo my-private-packageopgeven zodat uw pakket wordt gepubliceerd naar de juiste repo.


Antwoord 7, autoriteit 3%

U kunt de syntaxis van meerdere opslagplaatsen gebruiken voor het registry-item in uw .npmrc-bestand:

registry=http://serverA.url/repository-uri/
//serverB.url/repository-uri/
//serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000
//registry.npmjs.org/

Dat zou ervoor zorgen dat uw npm naar pakketten op verschillende servers zoekt.


Antwoord 8

Enkele stappen die u kunt proberen. (zo doen we het op mijn werkplek)

  • Maak een registergroep met twee (of meer) bronadressen van de repository. De ene zou je interne privé zijn en de andere een proxy voor npmjs die prioriteit geeft aan de interne.
  • Maak van deze groep uw register in het .npmrc-bestand. Op deze manier zal npm altijd proberen het van de interne te halen, als het niet wordt gevonden, haal het dan van de proxy

Hopelijk helpt dat.


Antwoord 9

Ik kom hetzelfde probleem tegen wanneer mijn bedrijf zijn eigen register opzet, dus ik werk zwaar aan proxy- registerin proxy-multi-registriesom dit probleem op te lossen. Ik hoop dat het jou ook helpt.


Antwoord 10

Mijn aanpak was om een ​​kleine opdrachtregelvariant te maken die de registerschakelaar toevoegt.

Ik heb deze bestanden gemaakt in de map nodejs waar het uitvoerbare bestand npm zich bevindt:

npm-.cmd:

@ECHO OFF
npm --registry https://registry.npmjs.org %*

npm-:

#!/bin/sh
"npm" --registry https://registry.npmjs.org "[email protected]"

Als ik nu een bewerking wil uitvoeren tegen het normale npm-register (terwijl ik niet verbonden ben met de VPN), typ ik gewoon npm-waar ik normaal gesproken npm.

Gebruik dit voorbeeld om deze opdracht te testen en het register voor een pakket te zien:

npm- view lodash

PS. Ik ben in Windows en heb dit getest in Bash, CMD en Powershell. ik ook


Antwoord 11

Daarvoor gebruik ik de cli-tools van Strongloop; zie https://strongloop.com/strongblog/ switch-tussen-configure-public-and-private-npm-registry/voor meer informatie

Schakelen tussen repositories is zo eenvoudig als: slc registry use <name>


Antwoord 12

Vanaf 13 april 2020 is een dergelijke functionaliteit niet meer beschikbaar, tenzij u verschillende scopes kunt gebruiken, maar u kunt het script postinstallals tijdelijke oplossing gebruiken. Het wordt altijd uitgevoerd, nou, na elke npm-installatie:

Stel dat je je .npmrc hebt geconfigureerd om @foo-org/foo-pack-privatete installeren vanuit je privé github-repo, maar de @foo-org/foo-pack-public openbaar pakket is op npm (onder hetzelfde bereik: foo-org).

Uw postinstallatiekan er als volgt uitzien:

"scripts": {
    ...
    "postinstall": "mv .npmrc .npmrcc && npm i @foo-org/foo-pack --dry-run && mv .npmrcc .npmrc".
}

Vergeet niet om @foo-pack/foo-orgte verwijderen uit de dependenciesarray om ervoor te zorgen dat npm installhet niet probeert en haal het van github en voeg de vlag –dry-runtoe die ervoor zorgt dat package.jsonen package-lock.jsonongewijzigd blijven na npm-installatie.


Antwoord 13

Nee, NPM ondersteunt geen meerdere registers, behalve één met een bereik.

Raadpleeg: https://docs.npmjs.com/cli/ v7/using-npm/scope

Other episodes