Hier ist mein Problem. Wir haben eine private NPM-Registrierung, die nur in VPN funktioniert. Ich hätte gerne eine Fallback-Registrierung https://registry.npmjs.org, damit sie nahtlos funktioniert, wenn ich kein VPN mehr habe.
PS Derzeit verwende ich npmrc, das beim Umschalten zwischen .npmrc-Dateien als Problemumgehung gute Arbeit leistet
Antworten:
Sie können mehrere Registrierungen für Pakete mit Gültigkeitsbereich in Ihrer
.npmrc
Datei haben. Beispielsweise:Pakete im
@polymer
Geltungsbereich werden von https://registry.npmjs.org empfangen , der Rest wird von Ihrem lokalen NPM empfangen.quelle
Wenn Sie in Version 4.4.1 den Paketnamen ändern können, verwenden Sie:
Wo
@myco
ist Ihr Paketumfang?Sie können das Paket folgendermaßen installieren:
Für weitere Informationen: https://docs.npmjs.com/misc/scope
quelle
Invalid package name "@npmjs/": name can only contain URL-friendly characters
npm i
Für alle, die auch nach einer Lösung für die Authentifizierung suchen, würde ich die Lösung für Pakete mit Gültigkeitsbereich hinzufügen, bei der Ihre
.npmrc
Datei mehrere Zeilen enthalten kann:Jede Zeile repräsentiert eine andere NPM-Registrierung
quelle
npm login --registry=npm.example.com
. Die Anmeldeinformationen (authTokens) werden in der .npmrc-Datei in Ihrem Benutzerordner gespeichert, sodass Sie sie nicht im Quellcode ( docs.npmjs.com/cli/adduser ) haben müssenregistry.npmjs.org
müssen. Dies hat bei mirNicht der beste Weg, aber wenn Sie Mac oder Linux auch unter Windows verwenden, können Sie einen Alias für verschiedene Registrierungen festlegen.
quelle
alias npm-sin=npm --registry https://localhost:4873/
Da dies einige Jahre her ist und dies nicht möglich zu sein scheint (nur mit npm), besteht eine Lösung für dieses Problem darin, den Nexus Repository Manager (von Sonatype) zu verwenden. Nexus unterstützt mehrere Repositorys, mit denen Sie sie bestellen können, sowie Proxys / Caches, um die Geschwindigkeit zu verbessern.
Es gibt eine kostenlose Version und eine Pro / Paid-Version. Die Funktion, die dies unterstützt, wird unter https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries beschrieben
Die relevanten Informationen werden unten dupliziert. Wenn also die obige URL / der obige Link nicht mehr funktioniert, sind die Informationen immer noch hier.
Sie können damit private npm-Register erstellen
Und
Eine kurze Liste der Dinge, die Sie tun, um dies zum Laufen zu bringen, lautet also:
Installieren Sie Nexus
Erstellen Sie ein lokales / privates Repo (oder zeigen Sie auf Ihr privates Repo auf einem anderen Server).
Erstellen Sie eine GRUPPE, in der Ihr privates Repo und das öffentliche Repo aufgelistet sind.
Konfigurieren Sie Ihre $ HOME / .npmrc-Datei so, dass sie auf die gerade erstellte "GROUP" verweist.
Veröffentlichen Sie Ihre privaten npm-Pakete im lokalen Repo.
Benutzer können jetzt ein einmaliges Setup ausführen.
npm config set registry https://nexus/content/groups/GROUP
npm install
.npm install my-private-package npm install lodash any-other-public-package
Und sowohl Ihre öffentlichen als auch Ihre privaten Pakete können mit einem einfachen
npm install
Befehl installiert werden . Nexus findet das Paket, das jedes in der Gruppe konfigurierte Repo durchsucht, und gibt die Ergebnisse zurück. Npm glaubt also immer noch, dass es nur eine Registrierung gibt, aber hinter dem Vorhang werden mehrere Repos verwendet.WICHTIGER HINWEIS: Wenn Sie Ihre Komponenten veröffentlichen, müssen Sie den
npm publish --registry https://nexus/content/repositories/private-repo my-private-package
Befehl angeben, damit Ihr Paket im richtigen Repo veröffentlicht wird.quelle
npm-private
anstelle vonnpm-group
), können Sie denregistry
Schlüssel inpackage.json
Ihrem Projekt überschreiben (siehehttps://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
Details). Mitnpm config set registry <url>
können Sie z. B. festlegennpm-group
, welchesnpm-registry
(Weiterleitungs-Repository) undnpm-private
(Ihr eigenes Repository) enthält. Ich habe diese Lösung verwendet, weil das Entfernen von Artefakten aus dem lokalen GitLab CE zu kompliziert war.Sie können die Syntax mehrerer Repositorys für den
registry
Eintrag in Ihrer.npmrc
Datei verwenden:Das würde Ihre npm dazu bringen, nach Paketen auf verschiedenen Servern zu suchen.
quelle
serverA
,serverB
undserverC
Beispiel - Repositorys sind alle aus unserem internen Netzwerk nicht funktioniert für Sie. Ich weiß nicht, ob es für Sie geeignet ist, aber wenn Sie glauben, dass dies der Fall ist, können Sie versuchen, einen Nexus Repository Manager für die internen Repos bereitzustellen.Einige Schritte können Sie versuchen. (so machen wir das an meinem Arbeitsplatz)
Hoffentlich hilft das.
quelle
Ich benutze dafür die Cli-Tools von Strongloop. Weitere Informationen finden Sie unter https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/
Das Wechseln zwischen Repositorys ist so einfach wie:
slc registry use <name>
quelle
Ich habe das gleiche Problem, wenn mein Unternehmen eine eigene Registrierung eingerichtet hat. Daher überarbeite ich die Proxy-Registrierung stark in Proxy-Multi-Registries , um dieses Problem zu lösen. Hoffe es wird dir auch helfen.
quelle
Ab dem 13. April 2020 gibt es keine solche Funktionalität, es sei denn, Sie können verschiedene Bereiche verwenden, aber Sie können das Postinstall- Skript als Problemumgehung verwenden . Es wird immer ausgeführt und nach jedem npm installieren :
Angenommen, Sie haben Ihre .npmrc so konfiguriert, dass sie @ foo-org / foo-pack-private von Ihrem privaten Github-Repo installiert, aber das öffentliche Paket @ foo-org / foo-pack-public befindet sich auf npm (im selben Bereich: foo- org ).
Ihre Nachinstallation könnte folgendermaßen aussehen:
Vergessen Sie nicht, @ foo-pack / foo-org aus dem Abhängigkeitsarray zu entfernen , um sicherzustellen, dass die npm-Installation nicht versucht, es von github abzurufen, und das Flag --dry-run hinzuzufügen, das sicherstellt , dass package.json und package- lock.json bleibt nach der Installation von npm unverändert .
quelle
Mein Ansatz war es, eine leichte Befehlszeilenvariante zu erstellen, die den Registrierungsschalter hinzufügt.
Ich habe diese Dateien im Ordner nodejs erstellt, in dem sich die ausführbare Datei npm befindet:
npm-.cmd
::npm-
::Wenn ich jetzt eine Operation gegen die normale npm-Registrierung ausführen möchte (während ich nicht mit dem VPN verbunden bin), tippe ich einfach dort,
npm-
wo ich normalerweise tippenpm
.Verwenden Sie dieses Beispiel, um diesen Befehl zu testen und die Registrierung für ein Paket anzuzeigen:
PS. Ich bin in Windows und habe dies in Bash, CMD und Powershell getestet. ich auch
quelle