Trabajando con registros NPM privados
Israel Olvera
Posted on March 1, 2022
El contenido presentado es orientado al ambiente de desarrollo con JS y TS, y hay una gran cantidad de recursos que pueden explicar este contenido, pero yo trataré de explicarlo de la forma más clara y sencilla que me sea posible.
Claro está que también compartiré las cosas con las que me he encontrado y te daré la solución con un fundamento detrás para que no solo hagas copy/paste
Los registros privados son muy comunes, en el entorno empresarial; cuando se requiere alojar múltiples módulos de uso interno, sin necesidad de pagar por el servicio organizacional de npm. También servicios de alojamiento de repositorios como Github y GitLab ofrecen la funcionalidad de tener esta característica.
Contenidos
Login
El login es sencillo, recordemos que por defecto siempre se va a apuntar al registro público de npm, entonces, para hacer el login basta con ejecutar:
npm login
ó bien para apuntar a un registro privado:
npm login --regsitry <dirección-del-registro>
Cambiar la configuración del registro por defecto, también es fácil:
npm config set registry <dirección-del-registro>
con esta modificación se puede ejecutar npm login y el login será directo a la dirección del registro que se asignó
NOTA: Esta configuración solo será aplicada de forma "local", pero para que las modificaciones tomen efecto para todo el sistema recuerda usar la bandera --global
Login con 2FA activo
Cuando se hace uso del Two-Factor Authentication (2FA), se requiere un token para poder hacer un login "exitoso". Si se realiza un login sin el token y se trata de instalar alguna dependencia organizacional o de un repositorio privado; la instalación fallará.
Para lograr realizar la instalación se tiene que realizar lo siguiente:
1.- Ejecutar: npm login
2.- Obtener el token que se ha creado
Este token se genera automáticamente, se encuentra en el archivo .npmrc ubicado en el directorio $HOME
En Windows es: C:/Users/ y en Linux, si soy sincero, no lo recuerdo y no quiero obtener la respuesta de google; quiero reforzar un poco la memoria. Pero puedes obtener la ruta del directorio con $HOME.
El token es la cadena de texto dentro de las comillas después de :authToken=, este a su vez deberá corresponder de la dirección del registro a la cual está asignada.
3.- Volver a ejecutar el login pero agregando el token al final de la siguiente forma:
npm login --regsitry <dirección-del-registro>/:_authToken=<token>
4.- Volver a tratar de instalar las dependencias
Instalación
Cuando se hace uso de los registros que proveen servicios como Gitlab, se requiere un token (con los permisos para acceder al registro), puedes encontrar más información en Gitlab | Package Registry.
NOTA: El token para la instalación de dependencias no es el mismo que el token que se requiere para hacer el login
Es común que en los proyectos se llegue a ver un archivo .npmrc dentro del proyecto, con la configuración para poder conocer los scopes (alcances) de las dependencias que el proyecto requiere
NOTA: Es IMPORTANTE que NUNCA, NUNCA, NUNCA se agreguen tokens o keys dentro de estos, por cuestiones de seguridad, es más conveniente que se usen variables de entorno para asignarlos.
Como se puede ver en Gitlab, hay varias formas de identificar a los módulos/dependencias de un proyecto. En la documentación se centra en el CI/CD, pero se puede realizar a nivel instancia, como se expondrá en este articulo.
Primero en el proyecto, debe de existir el fichero .npmrc, en el que se deberá identificar al registro del cual se obtendrán las dependencias, como por ejemplo:
@foo:registry=https://gitlab.example.com/api/v4/packages/npm/
//gitlab.example.com/api/v4/packages/npm/:_authToken=${TOKEN}
NOTA: Es importante que se mantenga la sección ${TOKEN}, esto; tomará el valor de la variable que se indica entre las llaves
Ahora, deberás generar un token, como ya se mencionó este token deberá tener permisos para poder acceder al registro.
Este token puede ser usado como variable del entorno, si se ejecuta el siguiente comando:
export TOKEN=<token>
Esto funcionará siempre en entornos *NIX, en sistemas Windows, en lo personal uso Git Bash pero desafortunadamente con esta ultima opción; esto no persiste en el entorno. En entornos Windows con sub kernel de linux, desconozco si funciona.
Hecho esto, ya se podrán instalar las dependencias desde los registros privados.
Posted on March 1, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.