Le contexte
Mon fichier .npmrc
semble être correctement lu (vérifié avec npm config ls -l
à la fois en ligne de commande et à partir de la construction Maven).
la machine sur laquelle npm
est exécuté ne peut pas se connecter directement au réseau, elle ne peut se connecter qu’à une URL de registre Nexus npm. Par conséquent, les propriétés de proxy proxy
et https-proxy
ne sont pas définies.
L'accès à Nexus étant restreint, j'ai généré un jeton d'accès à partir de Nexus.
Les jetons de sécurité Nexus sont constitués d'un nom d'utilisateur et d'un mot de passe, qui contiennent tous deux des caractères tels que /
qui doivent généralement être "codés par l'URL".
comme prévu, avec cette configuration, lors de l'exécution de npm install
, aucun proxy n'est détecté.
Le proxy de registre Nexus npm semble être correctement défini (je peux à la fois accéder aux fichiers json
et télécharger les fichiers tgz
à l'aide d'un navigateur Web après m'être connecté à l'aide du jeton généré)
Si je règle registry
sur http://registry.npmjs.org/
et commente _auth
, email
, always-auth
, strict-ssl
propriétés et que j'ajoute les configurations proxy
et https-proxy
, npm install
fonctionne comme prévu (mais je ne pourrai pas le faire dans l'environnement cible)
Contenu du fichier .npmrc
; 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
Question
Comment dois-je générer correctement la propriété _auth
pour que npm install
fonctionne comme prévu?
J'ai essayé jusqu'à présent
<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
Lors de l'obtention de l'erreur socket hang up
, j'ai la trace de pile suivante:
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 fsevents@^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)
Lors de l'obtention de l'erreur This request requires auth credentials
, j'ai la trace de pile suivante:
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 fsevents@^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)
Merci d'avance.
Après avoir regardé registry-client
code, j'ai trouvé la réponse, la voici. Je le poste car cela peut aider d'autres personnes:
base64Encode(<username>:<password>)
A propos, il existe un encodage d'URL, mais c'est authify.js
qui s'en occupe.
Le problème de "prise de ligne" auquel je suis confronté est dû au fait que si un proxy est défini dans la configuration Windows, lors du lancement de npm
à partir de la CLI (et non à partir d'une construction Maven), tous les paramètres de proxy `` `` .npmrc`` semblent à ignorer alors que les exclusions de proxy natif (pour les URL d'entreprise) sont ignorées par npm. Je vais ouvrir un ticket pour signaler ce comportement étrange.
https://books.sonatype.com/nexus-book/reference/npm-deploying-packages.html
$ echo -n 'username:password' | openssl base64
Je ne connais pas Nexus, mais nous utilisons artifactory comme référentiel npm, et je peux créer mon jeton d'authentification en appelant base64encode(username:encryptedPassword)
avec encryptedPassword
comme étant celui obtenu avec mon profil d'artéfact personnel.
Peut-être que cela aide.
Je viens d'écrire un emballage qui stocke les informations d'identification dans le trousseau de vos systèmes et les fournit à la volée. Découvrez: https://github.com/Xiphe/npm_keychain_auth