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 ....
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.
Tout d'abord, ce n'est pas un problème de "poulet et oeuf".
"npm adduser" fait deux choses:
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:
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.
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.
Aidez-moi contributeur de sinopie :) Voir ici: https://github.com/rlidwka/sinopia/issues/230#issuecomment-9182566
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