pnpm link
Alias: ln
Hace que el paquete local actual sea accesible en todo el sistema, o en otra ubicación.
pnpm link <dir>
pnpm link --global
pnpm link --global <pkg>
Opciones
--dir <dir>, -C
- Predeterminado: Directorio de trabajo actual
- Tipo: Ruta (como string)
Cambia la ubicación del enlace a <dir>
.
pnpm link <dir>
Enlaza el paquete desde la carpeta <dir>
a los node_modules del paquete situado en la ruta en la que se esté ejecutando este comando u otra especificada a través de la opción --dir
.
Por ejemplo, si está dentro de
~/projects/foo
y ejecutapnpm link --dir ../bar
, entoncesfoo
se vinculará abar/node_modules/foo
.
pnpm link --global
Enlaza el paquete desde la ubicación donde se ejecutó este comando o desde donde se especificó a través de la opción --dir
a los node_modules
globales, por lo que puede ser referenciado desde otro paquete con pnpm link --global <pkg>
. Además, si el paquete tiene un campo bin
, los archivos binarios del paquete estarán disponibles en todo el sistema.
pnpm link --global <pkg>
Enlaza el paquete especificado (<pkg>
) de los node_modules
globales a los node_modules
del paquete desde donde se ejecutó este comando o se especificó usando --dir
.
Casos de uso
Reemplazar un paquete instalado con una versión local del mismo
Digamos que tienes un proyecto que utiliza el paquete foo
. Desea realizar cambios en foo
y probarlos en su proyecto. En este escenario, puede usar pnpm link
para vincular la versión local de foo
a su proyecto, mientras que package.json
no se modificará.
cd ~/projects/foo
pnpm install # instala las dependencias de foo
pnpm link --global # enlaza foo globalmente
cd ~/projects/my-project
pnpm link --global foo # enlaza foo a my-project
También puede vincular un paquete de un directorio a otro directorio, sin usar la carpeta global node_modules
:
cd ~/projects/foo
pnpm install # instala dependencias de foo
cd ~/projects/my-project
pnpm link ~/projects/foo # enlaza foo a my-project
Añadir un binario globalmente
Si está desarrollando un paquete que tiene un binario, por ejemplo, una herramienta CLI, puede usar pnpm link --global
para que el binario esté disponible en todo el sistema. Esto es lo mismo que usar pnpm install -g foo
, pero usará la versión local de foo
en lugar de descargarla del registro.
Recuerde que el binario estará disponible solo si el paquete tiene un campo bin
en su package.json
.
cd ~/projects/foo
pnpm install # instala dependencias de foo
pnpm link --global # enlaza foo globalmente
¿Cuál es la diferencia entre pnpm link
y usar el protocolo file:
?
Cuando utiliza pnpm link
, el paquete enlazado está enlazado de forma simbólica desde el código fuente. Puede modificar el código fuente del paquete vinculado y los cambios se reflejarán en su proyecto. Con este método pnpm no instalará las dependencias del paquete vinculado, tendrás que instalarlas manualmente en el código fuente. Esto puede ser útil cuando tiene que usar un administrador de paquetes específico para el paquete vinculado, por ejemplo, si desea usar npm
para el paquete vinculado, pero pnpm para su proyecto.
Cuando usa el protocolo file:
en dependencies
, el paquete vinculado está vinculado a su proyecto node_modules
, puede modificar el código fuente del paquete vinculado y los cambios se reflejarán en su proyecto. Con este método, pnpm también instalará las dependencias del paquete vinculado, anulando el node_modules
del paquete vinculado.
When dealing with peer dependencies it is recommended to use the file:
protocol. Resuelve mejor las dependencias de pares de las dependencias del proyecto, asegurando que la dependencia vinculada use correctamente las versiones de las dependencias especificadas en su proyecto principal, lo que genera comportamientos más consistentes y esperados.
Feature | pnpm link | Protocolo file: |
---|---|---|
Enlace simbólico/Enlace duro | Enlace simbólico | Enlace duro |
Refleja las modificaciones del código fuente | Sí | Sí |
Instala dependencias del paquete vinculado | No (requiere instalación manual) | Sí (sobreescribe el node_modules del paquete vinculado) |
Usa un administrador de paquetes diferente para la dependencia | Posible (p. ej., use npm para paquete vinculado) | No, usará pnpm |