¡Compártelo!
Compartir en facebook
Compartir en twitter
Compartir en linkedin

Configurar Verdaccio: registro privado de paquetes npm

En este post veremos cómo configurar Verdaccio con una configuración básica de permisos para disponer de un registro privado de paquetes npm.

¿Que es Verdaccio?

Verdaccio es una herramienta ligera y de código abierto para disponer de un registro privado de paquetes npm. Siendo compatible con otras herramientas de gestión de paquetes como yarn y pnpm. Además de tener soporte con Docker y Kubernetes.

Si alguna vez habéis usado npm, sabréis que hay muchísimos paquetes disponibles en el registro oficial de npm. Estos paquetes son públicos. Pero, ¿qué pasa si quiero tener paquetes privados? Pues tienes dos opciones: pagar un plan privado de npm o montar tu propio registro de paquetes. Verdaccio es ideal para cumplir este último propósito.

Requisitos para configurar Verdaccio

Configurar Verdaccio para tener un registro privado de paquetes npm

Primero creamos las carpetas necesarias para guardar nuestra configuración y contenido donde consideremos.

Configurar Verdaccio

Y después añadimos nuestro archivo de configuración config.yaml dentro de la carpeta verdaccio / conf que acabamos de crear, con la configuración que veremos a continuación.

Usaremos como base la configuración por defecto de Verdaccio y solo cambiaremos la opción packages.

En este ejemplo tenemos dos clientes diferentes. Cada uno de ellos con sus administradores, que pueden publicar y eliminar paquetes; y los desarrolladores, que pueden acceder a estos.

storage: /verdaccio/storage/data # contiene los paquetes
plugins: /verdaccio/plugins # contiene plugins
 
# interfaz web de verdaccio
web: 
  title: Verdaccio
 
# autenticación
auth: 
  htpasswd:
    file: /verdaccio/storage/htpasswd
 
# otros registros de npm a los que se puede acceder
uplinks: 
  npmjs:
    url: https://registry.npmjs.org/ # registro oficial de npm
    agent_options:
      	keepAlive: true
      maxSockets: 40
      maxFreeSockets: 10
 
# configuración de permisos, aquí definimos los usuarios que
pueden realizar las diferentes acciones:
 
# access: ver y descargar paquetes
# publish: publicar paquetes
# unpublish: eliminar paquetes
# proxy: registro de paquetes addicional, usaremos el registro
definido en el apartado anterior “uplinks” para poder acceder a
los paquetes del registro oficial además de nuestros paquetes
privados
 
packages: 
  '@client-a/*':
    access: admin-client-a developer-client-a
    publish: admin-client-a
    unpublish: admin-client-a
    proxy: npmjs
 
  '@client-b/*':
    access: admin-client-b developer-client-b
    publish: admin-client-b
    unpublish: admin-client-b
    proxy: npmjs
 
  '**':
    access: admin developer
    publish: admin
    unpublish: admin
    proxy: npmjs
 
# configuración de middlewares
middlewares:
  audit:
    enabled: true
 
# configuración de logs
logs: 
  - { type: stdout, format: pretty, level: http }

Puesta en marcha de Verdaccio

Arrancamos el contenedor de Docker indicando en el comando las rutas de las carpetas que creamos en el paso anterior.

docker run -it --rm --name verdaccio -p 4873:4873 -v 
your-path/verdaccio/conf:/verdaccio/conf -v 
your-path/verdaccio/storage:/verdaccio/storage verdaccio/verdaccio:4

Estará funcionando correctamente si vemos lo mostrado a continuación en la consola:

Puesta en marcha de Verdaccio

Y podemos verlo funcionando si accedemos a http://localhost:4873 en nuestro navegador.

Puesta en marcha de Verdaccio

Comprobar que Verdaccio funciona correctamente

Para probar que Verdaccio funciona correctamente necesitamos dos proyectos: uno tendrá nuestra librería y el otro la usará. Podemos usar la siguiente estructura y de este modo, veremos los pasos a seguir para crearla.

Comprobación funcionamiento Verdaccio

Configurar proyectos

Primero crearemos el package.json de nuestra librería lanzando npm init en la ruta tutorial / client-a / components-lib y rellenamos los campos que aparecen en consola.

Es fundamental que nombremos nuestra librería con un prefijo. En este caso será @client-a. De otra forma los permisos no funcionarán según los tenemos definidos en el archivo config.yaml. Además, esto nos permite diferenciar entre nuestros paquetes privados y los del registro oficial de npm.

Configurar proyectos en Verdaccio

Para crear el package.json de nuestra aplicación podemos lanzar npm init –yes (para que use los valores por defecto ya que no es necesario modificarlos) en la ruta tutorial / app

A continuación, indicamos a npm que registro de paquetes debe usar. Añadiremos lo siguiente en el archivo .npmrc de ambas carpetas.

registry=http://localhost:4873

Así, cualquier comando de npm que ejecutemos pasará por nuestro registro.

Creación y publicación de la librería

Primero escribimos el código de nuestra librería en tutorial / client-a / components-lib / index.js.

const componentes = ['c1', 'c2', 'c3']; 
exports.componentes = componentes;

Para publicarlo necesitamos un usuario con permisos adecuados.

Vamos a crear el usuario desarrollador developer-client-a para comprobar que los permisos son correctos y no tiene permitido publicar paquetes.

Para crear usuario usamos el comando npm adduser.

Npm adduser Verdaccio

Después ejecutamos el comando npm publish y debería aparecernos el siguiente error:

Npm publish Verdaccio

Ahora vamos a probar con el usuario administrador admin-client-a.

npm adduser

Npm adduser verdaccio

npm publish

Esta vez debería funcionar y la consola mostraría lo siguiente:

Npm publish Verdaccio

Por último, hacemos login con el usuario admin-client-a o developer-client-a en Verdaccio desde el navegador y podremos ver nuestra librería. En esta ocasión cualquier usuario sirve porque ambos tienen permiso de acceso.

Ver nuestra librería en Verdaccio

Uso de la librería

Vamos a la carpeta de nuestra aplicación tutorial / app, lanzamos el comando npm login para iniciar sesión con el usuario developer-client-a e instalamos la librería.

npm i @client-a/components-lib

Escribimos el código de nuestra aplicación en tutorial / app / index.js.

const components = require('@client-a/components-lib'); 
console.log(components);

Y lo ejecutamos.

Ejecución Verdaccio

Conclusiones

Verdaccio es tan fácil de usar e instalar (vas a tardar más en probarlo que en tenerlo funcionando) que es una herramienta ideal para tener un registro privado de paquetes npm, si el proyecto está dentro del ecosistema de Javascript. Y tú, ¿prefieres pagar o montarlo por tu cuenta?

¡Suscríbete al canal de YouTube de Profile, donde compartimos más conocimiento sobre programación!

Artículos relacionados

Oh My ZSH

Vitamina tu terminal con Oh My ZSH

Para todos los que nos dedicamos al mundo del desarrollo software, una gran parte del tiempo de nuestro trabajo pasa al lado de nuestra querida terminal. En este post hablaremos de Oh My ZSH, un paquete de utilidades, plugins y plantillas para el shell ZSH que

sdkman

SDKMAN!: ¿qué es, cómo instalarlo y utilizarlo?

En este artículo vamos a hablar un poco sobre qué es SDKMAN!, cómo se instala y qué nos ofrece. Veremos también un ejemplo real de cómo instalar varias versiones de Java utilizando esta herramienta. ¡Sigue leyendo! ¿Qué es SDKMAN!? SDKMAN! es una herramienta que nos

DevToys

DevToys, o cómo facilitar el día a día de un desarrollador software

Microsoft nos presenta, de la mano de Etienne Baudoux, DevToys, una pequeña suite de utilidades de código abierto enfocada a facilitar el día a día de los desarrolladores de software. Su creador la define como una “navaja suiza para desarrolladores” y, desde hace pocos meses,