Cómo registrar un repo npm local


Si deseas compartir tus paquetes npm con el mundo, puedes utilizar su canal oficial, pero en ocasiones es necesario compartirlos de forma privada dentro de la organización a la que perteneces.

Con el gestor de repositorios Nexus, no solo es posible crear tu repo npm local, sino que puedes además enlazarlo al registro oficial y mantener en caché los paquetes que otros descarguen, ahorrando así ancho de banda en peticiones duplicadas.

Instala el software

Nexus se encuentra disponible para la mayoría de sistemas. Puedes instalarlo en Windows, GNU/Linux o MAC. En Linux puedes o bien descargar un ejecutable de extensión .run o un comprimido en tar.gz. En lo particular utilizo este último pues constituye una versión portable del software.

Para usarlo, descomprime el fichero con nombre similar a nexus-3.0.1-01-unix.tar.gz y ejecuta desde la terminal el comando ./bin/nexus run-redirect. En la propia consola te saldrán los logs como resultado de la ejecución del proceso. Puede demorar un poco porque la primera vez necesita iniciar la cache y sus bases de datos.

Cuando termine de inicializarlo todo debes ver el mensaje en la consola siguiente:

  • Started Sonatype Nexus OSS 3.0.1-01

La interfaz Web

Dirígete a http://localhost:8081 e inicia sesión con usuario admin y contraseña admin123. Esto es lo que verás:

Da clic en el ícono de engranage que aparece en el header de la página para ver todas las opciones de administración.

Creando el respositorio NPM

Un repositorio Nexus consta de 2 partes: un blob y la configuración del repo en sí. El blob es el almacenamiento local donde se alojarán los ficheros correspondientes al repo que se está creando.

Puedes utilizar un blob diferente para cada repositorio o compartir el mismo entre varios. Al final todo se traduce a una carpeta que se crea dentro de nexus/data/blobs/ para almacenar datos.

Existe por defecto el blob default, el cual puedes usar para tu repo local. Selecciona el botón Repositories, te aparecerán una serie de repos configurados por defecto, ignóralos y da click en Create repository. Del listado que se muestra, hay tres tipos de repos npm: hosted, proxy y group.

Si tu intención es crear un repo local para publicar paquetes privados y estos sean accesibles por los miembros de tu organización, selecciona el tipo hosted.

Si lo que deseas es crear una cache local de los paquetes que descargas del registry oficial, entonces el tipo debe ser proxy.

El tipo group se usa, como la palabra indica, para agrupar varios repositorios en una sola URL. De esta forma, si tienes varios repos NPM (ya sean de tipo proxy o hosted), los puedes agrupar para q sean consultados todos a la vez.

Cuando seleccionas el tipo hosted (crearás un repo privado) debes proporcionar un nombre y el blob que servirá de almacenamiento (en este caso selecciono el blob default y nombre minpmlocal).

Observa cómo al presionar el botón Create repository se añade a la lista con la URL http://localhost:8081/repository/minpmlocal. Dicha URL es la que debes usar como registry en npm.

Publicando tu Paquete NPM

El comando npm publish te permite “subir” tu paquete al repo que acabas de crear. Si nunca has creado un paquete NPM, sigue estos sencillos pasos, donde creo un supuesto componente para manejar la subida de imágenes en proyectos web:

mkdir react-upload-image
npm init # llena los datos que te pide npm
echo "Componente ficticio" > index.js

Con esto ya tienes un paquete npm listo para publicar, el cual consta de 2 ficheros: el autogenerado package.json y el index.js. Si tratas de utilizar el comando npm publish te dara error pues no has configurado la autenticación hacia el repositorio.

NPM y el servidor Nexus

No basta con hacer npm login y establecer las credenciales admin:admin123 para poder publicar, en cambio, este string tiene que estar codificado en base64. Lógralo de la siguiente manera:

echo -n 'admin:admin123' | openssl base64

El string generado es YWRtaW46YWRtaW4xMjM=. Solo resta indicarle a NPM que lo use. Para ello abre el fichero /home/usuario/.npmrc y plasma lo siguiente:

registry=http://localhost:8081/repository/minpmlocal/

# permitir publicar paquetes
init.author.name=Tu Nombre
init.author.email=mycyberacademy@gmail.com
init.author.url=mycyberacademy.com

email=mycyberacademy@gmail.com
always-auth=true
_auth=YWRtaW46YWRtaW4xMjM=

Lo importante aquí es la última línea, que establece el string creado anteriormente para la autenticación con el servidor.

Prueba que funciona

Publiquemos nuestro pequeño y desfuncional paquete:

cd react-upload-image
npm publish .
+ react-upload-image@0.0.1

La tercera línea indica que se subió correctamente el paquete, y para ratificarlo puedes verlo también desde la interfaz web de nexus:

http://localhost:8081/#browse/browse/components:minpmlocal.

Conclusiones

Nexus es una gran alternativa para crear repositorios locales de toda índole. Sin dudas es una gran pieza tecnológica para los desarrolladores que pertenecen a una organización.

Espero no tengas problemas para subir cualquier paquete npm a tu Repo propio y cualquier sugerencia te invito plasmarla en los comentarios.