Introdución a pnpm
Manejador de paquetes en Node.js rápido y eficiente con tu disco duro
BeerJS Cba 58 - 2021
Juan Picado
Hoy hablamos de
Manejadores de Paquetes
pnpm (performant npm)
Un poco de historia
Es de los más rápidos en muchas circunstancias
Todos crecen en popularidad empujados por JavaScript en general
Instalando pnpm
Corepack
Desde Node.js 17 o mayor (o Node.js 16 experimental)
Que nos ofrece pnpm?
pnpm usa enlaces simbolicos
Hoisted Modules
Desde npm@3 construye árbol de directorio en modo “flat”
pnpm install --shamefully-hoist
Hoisted Modules
Un ejemplo sencillo:
Dependencia A y B
A -> B@1.0.0
C -> B@2.0.0
Hoisted Modules
Si una dependencia está duplicada, se guarda en un segundo nivel.
@jotadev/b
esta dentro de @jotadev/c
Hoisted Modules
Si una dependencia está duplicada, se guarda en un segundo nivel.
@jotadev/b
esta dentro de @jotadev/c
Hoisted Modules
Node.js resuelve enlaces simbólicos como enlaces reales.
Hoisted Modules
.pnpm es la carpeta que almacena todos los paquetes en una estructura plana, así que cada paquete puede ser encontrado bajo este patrón.
Limitaciones
pnpm import
Con este comando puedes lidiar con la anterior limitación y convertir otros lockfiles a pnpm-lock.yaml.
Comandos en pnpm
Comandos populares
pnpm guarda compatibilidad con npm en muchos de sus comandos. Incluso pnpm delega algunos de ellos a npm que aun no han sido implementados.
pnpx (pnpm dlx and pnpm exec run)
pnpx es un comando similar a npx (es legacy).
pnpm dlx es similar a pnpx con la diferencia que necesita pnpm preinstalado y instala el paquete y lo ejecuta.
💡Util para ejecutar create-react-app
pnpx (pnpm dlx and pnpm exec run)
pnpx es un comando similar a npx (es legacy).
pnpm exec es similar a pnpx con la diferencia que ejecuta paquetes desde node_modules/.bin
💡 Muy útil cuando necesitas ejecutar jest o eslint directamente
pnpm filter
Filtering es una manera de ejecutar scripts dentro de un workspaces sin navegar a carpetas con patrones.
💡 Como en Lerna
pnpm y workspaces
pnpm workspaces
Workspaces es una característica que te permite administrar múltiples paquetes dentro de un proyecto (mono-repo).
Debe existir un archivo pnpm-workspaces.yaml en la raíz del repositorio.
Para Avanzados 🤠
pnpm plug and play
El archivo .pnpmfile.cjs te permite modificar la ejecución de la instalación con hooks.
GitHub Actions
En vez de instalar pnpm de manera manual, puedes usar el GH Action con caché integrado.
pnpm env <cmd>
Te permite instalar Node.js como si lo hicieras on nvm (node version manager).
Overrides
TBA
😎 Demo 🥳
15 minutos
Interesante para leer
Gracias !!