web-dev-qa-db-fra.com

Comment publier des projets privés sur Sinopia (npm adduser pour le registre privé échoue)

Ok, j'ai finalement réussi à obtenir un registre npm privé en utilisant Sinopia. Mais je ne peux rien y publier.

TL; DR: Sinopia ne prend pas en charge npm adduser , mais dispose de sa propre gestion des utilisateurs. Npm a également besoin d'un utilisateur valide créé avant npm publication à travers npm adduser , qui échoue car le serveur Sinopia interne envoie une erreur à la commande non prise en charge ....

Comment utiliser Sinopia comme registre privé avec des utilisateurs et des mots de passe appropriés

  1. créer un utilisateur global dans npmjs.org, puis un autre avec le même mot de passe dans Sinopia?
  2. Ou existe-t-il un moyen plus simple de dire à npm d'utiliser simplement un utilisateur/pass fixe.
  3. Ou encore mieux me demander en quelque sorte le nom d'utilisateur et le mot de passe?
  4. autre chose?

Synopsis:

Sinopia ne dépend pas de Couch.DB et récupérera des paquets qu'il n'a pas déjà d'un maître (la valeur par défaut est le npmjs.org global).

Sinopia démarre parfaitement et est configuré pour écouter sur toutes les interfaces. Cela fait des merveilles en servant des packages à

npm install

J'ai même configuré ~/.npmrc pour toujours pointer vers le registre interne.

Le fichier package.json de tous les projets est défini sur

  ....
  "publishConfig" : {
     "registry" : "http://internal-npm:4873"
  },
  ....

J'ai également réussi à ajouter des utilisateurs personnalisés dans sinopia en manipulant le config.yaml à l'aide de js-yaml

crypto.createHash('sha1').update('theBigPassword').digest('hex')

Maintenant je suis coincé

npm --registry=http://internal-npm:4873 --ca=null publish

Après une longue attente, je reçois:

npm ERR! need auth auth and email required for publishing
npm ERR! need auth You need to authorize this machine using `npm adduser`

npm ERR! System Linux 3.11.0-18-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "--registry=http://internal-npm:4873" "--ca=null" "publish"
npm ERR! cwd /home/ciprian/workspace/netop-npm
npm ERR! node -v v0.10.15
npm ERR! npm -v 1.2.18
npm ERR! code ENEEDAUTH
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/ciprian/workspace/netop-npm/npm-debug.log
npm ERR! not ok code 0

La fin commerciale du fichier journal me dit que l'utilisateur n'est pas facultatif

86 error need auth auth and email required for publishing
86 error need auth You need to authorize this machine using `npm adduser`
87 error System Linux 3.11.0-18-generic
88 error command "/usr/bin/nodejs" "/usr/bin/npm" "--registry=http://internal-npm:4873" "--ca=null" "publish"
89 error cwd /home/ciprian/workspace/netop-npm
90 error node -v v0.10.15
91 error npm -v 1.2.18
92 error code ENEEDAUTH
93 verbose exit [ 1, true ]

Maintenant, le problème poulet et œuf est que Sinopia ne prend pas en charge npm adduser, mais possède sa propre gestion des utilisateurs comme je l'ai mentionné ci-dessus. Npm a également besoin d'un utilisateur valide créé via npm adduser, qui échoue car le serveur Sinopia interne envoie une erreur à la commande non prise en charge.

20
cdanea

Tout d'abord, ce n'est pas un problème de "poulet et oeuf".

"npm adduser" fait deux choses:

  1. il crée un nouvel utilisateur sur le serveur distant ou vérifie qu'il existe
  2. il ajoute _auth à votre .npmrc

Sinopia se plaindra si l'utilisateur n'existe pas, mais si c'est le cas, il signalera avec succès le succès.


Donc, ce que vous devez faire est le suivant:

  1. ajoutez user/pass à config.yaml (voir la réponse de josh) et redémarrez le serveur sinopia
  2. courir npm adduser --registry http://internal-npm:4873/

Oui, la commande "adduser" prête à confusion, car elle n'ajoutera pas réellement un nouvel utilisateur. Il suffit de vérifier que l'utilisateur existe dans la configuration.

Si vous le souhaitez, vous pouvez utiliser la commande "npm login". C'est moins déroutant même si cela fait exactement la même chose. :)


Deuxièmement, ajoutez ceci à votre package.json:

"publishConfig": {
  "registry": "http://internal-npm:4873/"
}

De cette façon, npm ne le publiera plus dans le registre public, même s'il s'agit d'un registre par défaut.


Et enfin, vous ne pouvez pas utiliser deux registres (npmjs et votre privé) en même temps avec le même npmrc. C'est même moins sûr que vous ne le pensez.

C'est correct dans la plupart des cas, mais si vous devez les utiliser tous les deux (par exemple, vous gérez des packages publics et privés en même temps), utilisez yapm au lieu de npm et écrivez quelque chose comme ça dans votre .npmrc:

[registries."https://registry.npmjs.org/"]
_auth = (your auth string for public registry)

[registries."http://internal-npm:4873/"]
_auth = (your auth string for private registry)
always-auth = true

Cela empêchera d'exposer vos mots de passe au registre public dans tous les cas.

25
alex

L'option 1 fonctionne , mais je n'en suis pas vraiment satisfait. Je continuerai donc à chercher

OUI, si j'ajoute un utilisateur npmjs.org valide, alors avec le dépôt:

npm config set registry http://internal-npm:4873/

La commande de publication fonctionnera si le même utilisateur/passe existe dans Sinopia

npm publish --registry=http://internal-npm:4873/

L'inconvénient est que si quelqu'un oublie de définir explicitement le registre privé, la publication fonctionnera à 100% sur le npmjs.org global, ce qui serait un désastre.

4
cdanea

Aidez-moi contributeur de sinopie :) Voir ici: https://github.com/rlidwka/sinopia/issues/230#issuecomment-9182566

0
darky

Depuis la version 0.13, Sinopia prend en charge la création d'un nouvel utilisateur via

npm adduser --registry example.com:port

Pour plus de détails, voir: COMMENT CRÉER UN NOUVEL UTILISATEUR SINOPIA

0
mvermand