A veces puede ser útil probar paquetes npm sin tener que publicarlos, con este comando podemos hacerlo fácilmente.
Cuando trabajamos en el entorno de desarrollo y usamos varios paquetes de Node.js que dependen entre sí, puede ser tedioso publicar cada cambio para probarlos juntos. El proceso es largo: hacer el cambio, hacer un commit, crear una nueva versión, usar la nueva versión en el proyecto, etc. Si sólo queremos usar la nueva versión temporalmente, con npm link podemos hacerlo rápidamente. Este comando nos permite vincular paquetes de manera local usando enlaces simbólicos.
Veamos cómo funciona en la práctica.
npm link?Como ya hemos dicho, npm link crea un acceso directo (enlace simbólico) entre dos paquetes Node.js locales. Así, cuando importamos un paquete en nuestro proyecto, Node.js lo carga desde el directorio local que enlazamos, en lugar de buscarlo en el registro de npm o en la carpeta node_modules estándar.
Esto nos permite trabajar en varios proyectos a la vez —por ejemplo, una librería y una aplicación que la usa— sin tener que instalar, desinstalar ni publicar nada.
Imaginemos que estamos desarrollando una librería llamada mi-lib y una aplicación llamada mi-app que la utiliza. Queremos probar cambios en mi-lib directamente desde mi-app.
Estructura de directorios:
/proyectos/├── mi-lib/│ └── package.json└── mi-app/ └── package.jsonContenido de los package.json:
mi-lib/package.json
{ "name": "mi-lib", "version": "1.0.0", "main": "index.js"}mi-app/package.json
{ "name": "mi-app", "version": "1.0.0", "dependencies": { "mi-lib": "^1.0.0" }}Supongamos que mi-lib/index.js tiene una función JavaScript simple:
export default function() { console.log('Hola desde mi-lib');};Queremos que cuando corramos mi-app, use la versión local de mi-lib —sin necesidad de publicarla.
npm linkVinculamos la librería globalmente
Desde el directorio de mi-lib, ejecutamos:
cd /proyectos/mi-libnpm linkEsto crea un enlace simbólico global a mi-lib. En sistemas UNIX, lo encontraremos en algo como /usr/local/lib/node_modules/mi-lib.
Enlazamos la librería a la app
Luego, en el directorio de mi-app, ejecutamos:
cd /proyectos/mi-appnpm link mi-libEste comando crea un enlace simbólico dentro de mi-app/node_modules/mi-lib apuntando a nuestra versión local.
Verificamos el enlace
Si listamos la carpeta node_modules de mi-app con el comando ls -lah:
/proyectos/mi-app/node_modules/└── mi-lib -> /proyectos/mi-lib/El archivo node_modules/mi-lib no es una copia, es un acceso directo al código fuente de mi-lib. Así, cualquier cambio que hagamos en la librería se refleja de inmediato en la app.
Probamos la integración
En mi-app/index.js podemos importar la librería:
import miLib from 'mi-lib'miLib();Si ejecutamos la app:
node index.jsVeremos en consola:
Hola desde mi-libAhora, si editamos mi-lib/index.js para que imprima otra cosa, los cambios se reflejan al instante al volver a ejecutar la app.
Cuando terminamos de trabajar localmente, podemos revertir los enlaces simbólicos fácilmente:
Desde mi-app:
npm unlink mi-libOpcionalmente, también desde mi-lib:
npm unlinkEsto restablece las dependencias a su estado original. Es útil para evitar conflictos si luego queremos usar versiones publicadas.
npm link es una herramienta que usamos para vincular paquetes locales durante el desarrollo sin pasar por el registro de npm. Nos permite trabajar más cómodos y con menos fricción cuando estamos creando y probando bibliotecas, herramientas CLI u otros componentes.
No es una solución permanente para la instalación de dependencias, pero nos ahorra tiempo valioso mientras escribimos y probamos código. En definitiva, nos da control y flexibilidad en un proceso que de otra forma sería más lento y propenso a errores.