Kontext
Meine .npmrc
-Datei scheint korrekt gelesen zu werden (mit npm config ls -l
sowohl von der Befehlszeile als auch vom Maven-Build aus geprüft).
die Maschine, auf der npm
ausgeführt wird, kann keine direkte Verbindung zum Netz herstellen, sie kann nur eine Verbindung zu einer Nexus npm-Registrierungs-URL herstellen. Daher werden die Proxy-Eigenschaften proxy
und https-proxy
nicht festgelegt.
Da der Zugriff auf Nexus eingeschränkt ist, habe ich aus Nexus ein Zugriffstoken generiert.
Nexus-Sicherheits-Token bestehen aus einem Benutzernamen und einem Kennwort, die beide Zeichen wie /
enthalten, die normalerweise "URL-codiert" sein müssen.
erwartungsgemäß wird bei dieser Konfiguration bei der Ausführung von npm install
kein Proxy erkannt.
Der Nexus npm-Registrierungsproxy scheint korrekt eingestellt zu sein (ich kann sowohl auf json
-Dateien zugreifen als auch tgz
-Dateien mit einem Webbrowser herunterladen, nachdem ich die Verbindung mit dem generierten Token hergestellt habe.)
Wenn ich registry
auf http://registry.npmjs.org/
setze und _auth
, email
, always-auth
, strict-ssl
-Eigenschaften kommentiere und proxy
und https-proxy
-Konfiguration hinzufüge, funktioniert npm install
wie erwartet (aber ich kann es nicht in der Zielumgebung)
Inhalt der .npmrc
-Datei
; Nexus proxy registry pointing to http://registry.npmjs.org/
registry = https://<Host>/nexus/content/repositories/npmjs-registry/
; base64 encoded authentication token
_auth = <see question below>
; required by Nexus
email = <valid email>
; force auth to be used for GET requests
always-auth = true
; we don't want to put certificates in .npmrc
strict-ssl = false
loglevel = silly
Frage
Wie sollte ich die _auth
-Eigenschaft ordnungsgemäß generieren, damit npm install
wie erwartet funktioniert?
Ich habe es bisher versucht
<username>:<password>
) npm info retry will retry, error on last attempt: Error: socket hang up
<username>:<password>
)) npm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.
<username>
) :
urlencode (<password>
)) npm info retry will retry, error on last attempt: Error: socket hang up
Beim Abrufen des socket hang up
-Fehlers habe ich die folgende Stapelablaufverfolgung:
http request GET https://<Host>/nexus/content/repositories/npmjs-registry/fsevents
sill fetchPackageMetaData Error: socket hang up
sill fetchPackageMetaData at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
sill fetchPackageMetaData at TLSSocket.g (events.js:260:16)
sill fetchPackageMetaData at emitNone (events.js:72:20)
sill fetchPackageMetaData at TLSSocket.emit (events.js:166:7)
sill fetchPackageMetaData at endReadableNT (_stream_readable.js:905:12)
sill fetchPackageMetaData at doNTCallback2 (node.js:441:9)
sill fetchPackageMetaData at process._tickCallback (node.js:355:17)
sill fetchPackageMetaData error for [email protected]^1.0.0 { [Error: socket hang up] code: 'ECONNRESET' }
WARN install Couldn't install optional dependency: socket hang up
verb install Error: socket hang up
verb install at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
verb install at TLSSocket.g (events.js:260:16)
verb install at emitNone (events.js:72:20)
verb install at TLSSocket.emit (events.js:166:7)
verb install at endReadableNT (_stream_readable.js:905:12)
verb install at doNTCallback2 (node.js:441:9)
verb install at process._tickCallback (node.js:355:17)
Beim Abrufen des This request requires auth credentials
-Fehlers habe ich die folgende Stapelablaufverfolgung:
npm sill fetchPackageMetaData Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm sill fetchPackageMetaData at CachingRegistryClient.authify (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\authify.js:17:14)
npm sill fetchPackageMetaData at CachingRegistryClient.makeRequest (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:103:17)
npm sill fetchPackageMetaData at <root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:66:17
npm sill fetchPackageMetaData at RetryOperation._fn (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\attempt.js:18:5)
npm sill fetchPackageMetaData at null._onTimeout (<root>\ui\target\node\node_modules\npm\node_modules\retry\lib\retry_operation.js:49:10)
npm sill fetchPackageMetaData at Timer.listOnTimeout (timers.js:92:15)
npm sill fetchPackageMetaData error for [email protected]^1.0.0 [Error: This request requires auth credentials. Run `npm login` and repeat the request.]
npm WARN install Couldn't install optional dependency: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install at CachingRegistryClient.authify (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\authify.js:17:14)
npm verb install at CachingRegistryClient.makeRequest (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:103:17)
npm verb install at <root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:66:17
npm verb install at RetryOperation._fn (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\attempt.js:18:5)
npm verb install at null._onTimeout (<root>\ui\target\node\node_modules\npm\node_modules\retry\lib\retry_operation.js:49:10)
npm verb install at Timer.listOnTimeout (timers.js:92:15)
Danke im Voraus.
Nachdem ich registry-client
-Code angesehen hatte, fand ich die Antwort, hier ist sie. Ich poste es, da es anderen Leuten helfen kann:
base64Encode(<username>:<password>)
Übrigens gibt es eine URL-Codierung, aber authify.js
kümmert sich darum.
Das "Socket-Hang-Up" -Problem, mit dem ich konfrontiert bin, beruht auf der Tatsache, dass, wenn ein Proxy in der Windows-Konfiguration festgelegt ist, beim Starten von npm
von der CLI (und nicht von einem Maven-Build) alle `` .npmrc``-Proxy-Einstellungen angezeigt werden Wird ignoriert, während native Proxy-Ausschlüsse (für Unternehmens-URLs) von npm ignoriert werden. Ich werde ein Ticket eröffnen, um dieses seltsame Verhalten zu melden.
https://books.sonatype.com/nexus-book/reference/npm-deploying-packages.html
$ echo -n 'username:password' | openssl base64
Ich weiß nichts über Nexus, aber wir verwenden artifactory als npm-Repo. Dort kann ich mein Auth-Token erstellen, indem ich base64encode(username:encryptedPassword)
anrufe, wobei encryptedPassword
das ist, das ich von meinem persönlichen Artifactory-Profil bekomme.
Vielleicht hilft das.
Before you run npm login, please follow the instructions below :
1) Create an ~/.npmrc file with the following contents:
registry=https://example.com/repository/npm-group/
[email protected]
always-auth=true
//example.com/repository/npm-group/:_authToken=
2) run `npm login`
# npm login
Username: firstname.lastname
Password:
Email: (this IS public) [email protected]
Logged in as firstname,lastname on https://example.com/repository/npm-group/.
Use the same password you use to login to example.com
Ich habe gerade einen Wrapper geschrieben, der die Anmeldeinformationen in Ihrem System-Schlüsselbund speichert und sie sofort zur Verfügung stellt. Check out: https://github.com/Xiphe/npm_keychain_auth