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?
- crear un usuario global en npmjs.org, y luego otro con la misma contraseña en Sinopia?
- ¿O hay una manera más fácil de decirle a npm que solo use un usuario / pase fijo?
- ¿O incluso mejor me piden un nombre de usuario y una contraseña?
- ¿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
Yo ayudo al colaborador de sinopia :) Mira aquí: https://github.com/rlidwka/sinopia/issues/230#issuecomment-91825660
En primer lugar, no es un problema de "pollo y huevo".
"npm adduser" hace dos cosas:
- crea un nuevo usuario en el servidor remoto, o verifica que exista
- 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:
- agregue user / pass a config.yaml (vea la respuesta de josh) y reinicie el servidor de sinopia
- 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.