web-dev-qa-db-fra.com

Impossible de publier dans un registre NPM (local)

J'utilise Nexus 3.0.1-01 et je l'utilise pour héberger à la fois les référentiels Maven et les registres NPM. Pour NPM, j'ai un miroir local de npmjs.org, un registre de NPM local et un groupe qui combine les deux ...

enter image description here

J'utilise cela avec npm en interne, où je peux utiliser le groupe npm-public comme registre et cela fonctionne très bien. Donc, je peux utiliser Nexus pour refléter npmjs.

La prochaine étape consiste à récupérer les modules npm rédigés localement et à les publier dans npm-releases (sur mon instance Nexus) afin que ces modules puissent être partagés entre les équipes de diffusion ici. J'ai été capable de construire un paquet, et npm pack semble se comporter.

J'ai exécuté npm adduser pour fournir mes informations d'identification Nexus à mon environnement npm. J'utilise le même nom d'utilisateur/mot de passe que lorsque je me connecte à l'application Web Nexus, et le rôle d'administrateur est attribué à mon utilisateur (je devrais donc disposer de toutes les autorisations). Je peux voir les informations d'identification dans mon fichier .npmrc

enter image description here

Ma valeur de registre reste le groupe npm-public qui combine le miroir et mon registre local. Je me suis assuré que le package.json du module que je tente de déployer comporte une section "publishConfig" qui pointe vers l'URL du registre local (et non du groupe public).

enter image description here

Cependant, malgré tout cela, l'appel de "npm publish" entraîne une erreur 401 ...

enter image description here

En regardant le fichier npm-debug.log, je vois qu'il tente d'appeler l'appel HTTP PUT pour envoyer le fichier tgz assemblé dans le registre, ce qui renvoie une erreur 401.

enter image description here

J'ai activé la journalisation de débogage sur le paquet shiro sur le serveur, mais je ne vois qu'un seul message pensant qu'il a besoin d'une authentification

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.

Selon la documentation, j'ai fait tout ce que je devais faire (npm add user), mais je ne parviens pas à déployer correctement un module npm sur mon référentiel local.

Dois-je utiliser d'autres options lors de l'appel de npm publish? Dois-je définir d'autres paramètres sur le référentiel NPM hébergé sur mon serveur qui me permettront de publier sur celui-ci? Je l'ai assez bien créé en utilisant les valeurs par défaut. Ai-je oublié une étape qui m'empêche de déployer sur mon registre NPM hébergé?

Toute aide serait grandement appréciée, car je suis coincé pour le moment.

40
EdH

En fin de compte, le royaume des jetons porteur Npm ne figurait pas dans ma liste de domaines actifs. Une fois que je l'ai déplacé sur Active, la publication s'est terminée avec succès!

enter image description here

93
EdH

En plus de la réponse de @ EdH, nous avons découvert que le format de .npmrc avait changé, de sorte que _auth encodé en base64 ne fonctionnerait plus ... et que le jeton doit être créé en se connectant au référentiel.

ancien .npmrc

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

nouveau .npmrc

//Host/repo/:_authtoken=uuidOfToken
10
Daniel Schröter

En plus de la réponse de @ Daniel, j'ai découvert que lorsque ajout des informations d'identification de l'utilisateur/connexion à npm , vous ne pouvez pas insérer de barre oblique finale dans l'URL du registre.

Mauvais:

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

Bon:

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

De plus, si vous souhaitez automatiser la connexion (c’est-à-dire de manière non interactive), j’ai utilisé un bon outil appelé npm-cli-login .

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

Je me rends compte que cet article date de quelques années maintenant, mais en luttant avec cette question pendant de nombreuses heures, j'ai finalement trouvé ce qui fonctionnait pour moi et que je n'ai jamais vu ailleurs. Le problème était que je ne spécifiais pas le _authToken dans le .npmrc fichier. Ajouter ceci comme indiqué ci-dessous a résolu le problème et j'ai réussi à exécuter les commandes npm sans erreur 401.

.npmrc

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