tutorial nodejs node manager last commands node.js npm package-managers

node.js - nodejs - Cómo publicar proyectos privados en Sinopia(npm adduser para el registro privado falla)



npm tutorial (5)

Ok, finalmente logré obtener un registro privado de npm usando Sinopia. Pero no puedo publicar nada.

TL; DR: Sinopia no es compatible con npm adduser , pero tiene su propia administración de usuarios. También npm necesita un usuario válido creado antes de la publicación de npm a través de npm adduser , que falla porque el servidor interno de Sinopia arroja un error en el comando no admitido ....

¿Cómo se usa Sinopia como un registro privado con los usuarios adecuados y contraseñas?

  1. crear un usuario global en npmjs.org, y luego otro con la misma contraseña en Sinopia?
  2. ¿O hay una manera más fácil de decirle a npm que solo use un usuario / pase fijo?
  3. ¿O incluso mejor me piden un nombre de usuario y una contraseña?
  4. ¿algo más?

Sinopsis:

Sinopia no depende de Couch.DB y obtendrá paquetes que aún no tiene de un maestro (por defecto es el npmjs.org global).

Sinopia se inicia perfectamente y está configurado para escuchar en todas las interfaces. Funciona de maravilla al servir paquetes para

npm install

Incluso configuré ~ / .npmrc para apuntar siempre al registro interno.

El archivo package.json de todos los proyectos está configurado para

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

También logré agregar usuarios personalizados en sinopia mediante la manipulación de config.yaml con la ayuda de js-yaml

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

Ahora estoy atrapado en

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

Después de una larga espera, obtengo:

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

El extremo comercial del archivo de registro me dice que el usuario no es opcional

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 ]

Ahora, el problema del huevo y la gallina es que Sinopia no es compatible con npm adduser , pero tiene su propia administración de usuarios como mencioné anteriormente. También npm necesita un usuario válido creado a través de npm adduser , que falla porque el servidor interno de Sinopia arroja un error en el comando no admitido.


El Leop de Sinopia te dice exactamente qué hacer .

Agregar un nuevo usuario

No hay utilidad para agregar un nuevo usuario, pero al menos puede usar un nodo en la línea de comando para generar una contraseña. Deberá editar la configuración y agregar al usuario manualmente.

Inicie el nodo e ingrese el siguiente código reemplazando ''newpass'' con la contraseña para la cual desea obtener el hash.

$ node > crypto.createHash(''sha1'').update(''newpass'').digest(''hex'') ''6c55803d6f1d7a177a0db3eb4b343b0d50f9c111'' > [CTRL-D]

Inserta el nuevo usuario en tu archivo config.yaml.

Luego ejecuta npm adduser para iniciar sesión. ( adduser es el comando utilizado tanto para la creación de la cuenta como para el inicio de sesión; sinopia no admite la parte de creación).


La opción 1 funciona , pero no estoy muy contento con ella. Así que seguiré buscando

SÍ, si agrego un usuario válido de npmjs.org, entonces conecte el repositorio:

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

El comando de publicación funcionará si existe el mismo usuario / pase en Sinopia

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

La desventaja es que si alguien olvida establecer explícitamente el registro privado, la publicación funcionará al 100% en el npmjs.org global, lo que sería un desastre.


A partir de la versión 0.13, Sinopia admite la creación de un nuevo usuario a través de

npm adduser --registry ejemplo.com:port

Para más detalles vea: CÓMO CREAR UN NUEVO USUARIO DE SINOPIA



En primer lugar, no es un problema de "pollo y huevo".

"npm adduser" hace dos cosas:

  1. crea un nuevo usuario en el servidor remoto, o verifica que exista
  2. agrega _auth a su .npmrc

Sinopia se quejará si el usuario no existe, pero si lo hace, felizmente informará el éxito.

Entonces, lo que tienes que hacer es esto:

  1. agregue user / pass a config.yaml (vea la respuesta de josh) y reinicie el servidor de sinopia
  2. ejecutar npm adduser --registry http://internal-npm:4873/

Sí, el comando "adduser" es confuso, porque en realidad no agregará un nuevo usuario. Simplemente verificará que el usuario exista en la configuración.

Si lo desea, puede usar el comando "npm login". Es menos confuso a pesar de que hace exactamente lo mismo. :)

En segundo lugar, agregue esto a su paquete. Json:

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

De esta forma, npm ya no lo publicará en el registro público, incluso si es uno predeterminado.

Y, por último, no puede usar dos registros (npmjs y su privado) al mismo tiempo con el mismo npmrc. Es incluso menos seguro de lo que crees.

Está bien en la mayoría de los casos, pero si tiene que usar ambos (por ejemplo, mantiene paquetes públicos y privados al mismo tiempo), use yapm en lugar de npm y escriba algo como esto en su .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

Evitará exponer sus contraseñas al registro público en todos los casos.