No se puede publicar en un registro NPM (local)


Estoy ejecutando Nexus 3.0.1-01, y lo estoy usando para alojar tanto repositorios Maven como registros NPM. For NPM, I have a local mirror of npmjs.org, un registro local de NPM y un grupo que combine los dos...

introduzca la descripción de la imagen aquí

He estado usando esto con npm internamente, donde puedo usar el grupo npm-public como mi registro y esto ha estado funcionando bien. Por lo tanto, puedo usar Nexus para reflejar npmjs.

El siguiente paso es tomar módulos npm escritos localmente y publicarlos en npm-releases (en mi instancia Nexus) para que estos módulos puedan ser compartidos entre los equipos de entrega aquí. He sido capaz de construir un paquete, y el paquete npm parece comportarse.

He ejecutado npm adduser para proporcionar mis credenciales Nexus a mi entorno npm. Estoy usando el mismo nombre de usuario/contraseña que uso cuando inicio sesión en la aplicación web Nexus, y a mi usuario se le asigna el rol de administrador (por lo que debería tener todos los permisos). Puedo ver las credenciales en mi .npmrc file

introduzca la descripción de la imagen aquí

Mi valor de registro sigue siendo el grupo npm-public que combinó el mirror y mi registro local. Me he asegurado de que el paquete.json del módulo que estoy intentando desplegar tiene una sección "publishConfig" que apunta a la url del registro local (no al grupo público)

introduzca la descripción de la imagen aquí

Sin embargo, a pesar de todo eso, llamar a "npm publish" resulta en un error 401...

introduzca la descripción de la imagen aquí

Mirando el npm-debug.log, puedo ver que está intentando llamar a la llamada HTTP PUT para enviar el archivo tgz ensamblado al registro, y esto está devolviendo un error 401

introduzca la descripción de la imagen aquí

He habilitado el registro de depuración en el paquete shiro en el servidor, pero solo veo un solo mensaje pensando que necesita autenticación

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.

De acuerdo con la documentación, he hecho todo lo que se supone que debo hacer (agregar usuario npm) pero no puedo implementar con éxito un módulo npm en mi local repositorio.

¿Hay opciones adicionales que deba usar al llamar a npm publish? ¿Hay ajustes adicionales que deba realizar en el repositorio npm alojado en mi servidor que me permitan publicar en él? Prácticamente lo creé usando los valores predeterminados. ¿Me he perdido un paso que me impide implementar en mi registro npm alojado?

Cualquier ayuda sería muy apreciada, ya que estoy atascado en este momento.

 26
Author: EdH, 2016-09-13

3 answers

Resulta que no tenía el Reino de Token Portador de Npm en mi lista de reinos activos. Una vez que lo moví a Activo, la publicación se completó con éxito!

introduzca la descripción de la imagen aquí

 68
Author: EdH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-15 01:45:34

Adicionalmente a @EdH de la respuesta hemos descubierto que el formato de .npmrc ha cambiado por lo que base64 codificado _auth no funcionará más... y el token tiene que ser creado iniciando sesión en el repositorio.

Viejo .npmrc

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

Nuevo .npmrc

//host/repo/:_authtoken=uuidOfToken
 8
Author: Daniel Schröter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-01 16:59:15

Además de la respuesta de @Daniel, descubrí que cuando agrega credenciales de usuario/inicia sesión en npm, no puede tener una barra final en la url del registro.

Malo:

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

Bueno:

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

Además, si está buscando automatizar el inicio de sesión (es decir, no de forma interactiva), utilicé una buena herramienta llamada npm-cli-login.

npm-cli-login -u admin -p admin123 -e [email protected] -r https://repo/repository/npm-internal
 0
Author: Nick Grealy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-23 13:58:24