web-dev-qa-db-de.com

Veröffentlichung in einer NPM-Registrierung (lokal) nicht möglich

Ich verwende Nexus 3.0.1-01, um sowohl Maven-Repositorys als auch NPM-Registries zu hosten. Für NPM habe ich einen lokalen Spiegel von npmjs.org, eine lokale NPM-Registrierung und eine Gruppe, die die beiden ...

enter image description here

Ich habe dies mit npm intern verwendet, wo ich die npm-public-Gruppe als meine Registrierung verwenden kann und dies hat gut funktioniert. Daher kann ich Nexus verwenden, um npmjs zu spiegeln.

Der nächste Schritt besteht darin, lokal geschriebene npm-Module zu verwenden und in npm-Releases (auf meiner Nexus-Instanz) zu veröffentlichen, damit diese Module hier von den Bereitstellungsteams gemeinsam genutzt werden können. Ich konnte ein Paket zusammenstellen, und npm pack scheint sich zu verhalten.

Ich habe npm adduser ausgeführt, um meine Nexus-Anmeldeinformationen für meine npm-Umgebung bereitzustellen. Ich verwende denselben Benutzernamen/dasselbe Kennwort, den ich beim Anmelden bei der Nexus-Webanwendung verwende, und meinem Benutzer wird die Administratorrolle zugewiesen (daher sollte ich alle Berechtigungen haben). Ich kann die Anmeldeinformationen in meiner .npmrc-Datei sehen

enter image description here

Mein Registrierungswert ist immer noch die Gruppe npm-public , die den Spiegel und meine lokale Registrierung kombiniert hat. Ich habe sichergestellt, dass die package.json des Moduls, das ich bereitstellen möchte, über einen Abschnitt "publishConfig" verfügt, der auf die URL der lokalen Registrierung verweist (nicht auf die öffentliche Gruppe).

enter image description here

Trotzdem führt der Aufruf von "npm publish" zu einem 401-Fehler ...

enter image description here

Wenn ich mir die Datei npm-debug.log ansehe, kann ich sehen, dass versucht wird, den HTTP-PUT-Aufruf aufzurufen, um die zusammengesetzte tgz-Datei in die Registrierung zu verschieben. Dies gibt einen 401-Fehler zurück

enter image description here

Ich habe die Debug-Protokollierung für das shiro-Paket auf dem Server aktiviert, sehe jedoch immer nur eine einzige Meldung, die denkt, dass eine Authentifizierung erforderlich ist

2016-09-13 08:56:28,590+1000 DEBUG [qtp1257823896-4030] *UNKNOWN org.Apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter - Authentication required: sending 401 Authentication challenge response.

Laut Dokumentation habe ich alles getan, was ich tun soll (npm add user), aber ich kann ein npm-Modul nicht erfolgreich in meinem lokalen Repository bereitstellen.

Gibt es zusätzliche Optionen, die ich beim Aufrufen von npm publish verwenden muss? Gibt es zusätzliche Einstellungen, die ich am gehosteten npm-Repository auf meinem Server vornehmen muss, damit ich dort veröffentlichen kann? Ich habe es so ziemlich mit den Standardwerten erstellt. Habe ich einen Schritt verpasst, der mich daran hindert, meine gehostete npm-Registrierung bereitzustellen?

Jede Hilfe wäre sehr dankbar, da ich im Moment nicht weiterkomme.

40
EdH

Es stellte sich heraus, dass ich das Npm Bearer Token Realm nicht in meiner Liste der aktiven Realms hatte. Sobald ich es auf Aktiv verschoben habe, wurde die Veröffentlichung erfolgreich abgeschlossen!

enter image description here

93
EdH

Zusätzlich zu der Antwort von @ EdH haben wir festgestellt, dass sich das Format von .npmrc geändert hat, sodass base64-codiertes _auth nicht mehr funktioniert ... und das Token durch Einloggen in das Repo erstellt werden muss.

alte .npmrc

registry=https://Host/repo
_auth=12afdjsljl123213

neue .npmrc

//Host/repo/:_authtoken=uuidOfToken
10

Zusätzlich zu der Antwort von @ Daniel habe ich festgestellt, dass bei Hinzufügen von Benutzeranmeldeinformationen/Anmelden bei npm die Registrierungs-URL keinen abschließenden Schrägstrich enthält.

Schlecht:

npm adduser --registry=https://repo.localhost/repository/npm-internal/

Gut:

npm adduser --registry=https://repo/repository/npm-internal

Wenn Sie die Anmeldung automatisieren möchten (d. H. Nicht interaktiv), habe ich ein gutes Tool namens npm-cli-login verwendet.

npm-cli-login -u admin -p admin123 -e [email protected] -r https://repo/repository/npm-internal
4
Nick Grealy

Mir ist klar, dass dieser Beitrag jetzt ein paar Jahre alt ist, aber nachdem ich mich viele Stunden lang mit diesem Problem beschäftigt hatte, fand ich endlich heraus, was für mich funktioniert hat, was ich an vielen anderen Orten noch nicht gesehen habe. Das Problem war, dass ich nicht den _authToken In der .npmrc - Datei angegeben habe. Indem ich dies wie unten gezeigt hinzufügte, löste ich das Problem und konnte npm-Befehle erfolgreich ohne 401-Fehler ausführen.

.npmrc

registry=https://test.repo.com/repository/npm-group/
//test.repo.com/repository/npm-group/:_authToken=NpmToken.${NPM_TOKEN}
0
tripleplayj