🚨 ¡Nueva review! ¡Mi teclado ideal! ⌨️ Perfecto para programar, el Logitech MX Keys S . ¡Échale un ojo! 👀

He cambiado NPM por PNPM 11

Después del ataque a TanStack, me he ido con otra opción más segura

Escrito por domin el 13 de mayo de 2026

Introducción

¿Sabías que un paquete de npm podría mandarte un rm -rf / y borrarte el disco entero? Pues eso es exactamente lo que casi pasa hace nada con el ecosistema de .

Después de ver el vídeo de midudev explicando el percal, tengo claro que de momento NPM ya no es seguro por defecto. Así que he pillado a mi Linux Mint y he migrado todo el entorno a 11. Te pongo en contexto de por qué deberías hacer tú lo mismo y los comandos que he usado.

NPM tachado y PNPM como gestor de paquetes seguro en Linux Mint.

¿Qué ha pasado con TanStack?

Como cuenta Midu en el vídeo que dejo un poquito más adelante, un atacante metió código malicioso en paquetes bastante usados como TanStack Query o TanStack Router. Lo grave no es solo que robara tokens de AWS o GitHub, que ya es un poco loco, sino que el malware iba más allá.

El bicho dejaba un demonio corriendo en tu máquina y si te dabas cuenta del robo e intentabas revocar los tokens, te lanzaba un rm -rf / para eliminarte todo el disco.

Advertencia

NPM ejecuta scripts de instalación automáticamente al hacer npm install. Eso significa que cualquier paquete o subdependencia puede correr código en tu máquina sin que tú hagas absolutamente nada. Y sí, eso incluye rm -rf, entre otros.

Lo peor de todo es que tú no tienes que instalar el paquete malo a propósito. Te basta con que una dependencia de una dependencia de una dependencia lo tenga. Esa cosa que se llama " " y que cada vez vemos más.


PNPM 11 para evitar estos casos inseguros.

Podemos evitar estos casos con PNPM 11. No solo es más rápido que NPM y te ahorra gigas en disco gracias a sus enlaces simbólicos, es que además trae las protecciones que NPM debería traer desde hace años.

🛡️ Bloqueo de paquetes recién nacidos

No instala nada que tenga menos de 24 horas. Es justo la ventana en la que los ataques se suelen detectar y retirar del registro.

🔒 Sin scripts automáticos

No ejecuta postinstall ni código de subdependencias sin tu permiso explícito, así tú decides qué corre en tu máquina.

⚡ Más rápido

Reutiliza paquetes entre proyectos con enlaces simbólicos. Si ya tienes React 19 en otro proyecto, no lo descarga otra vez.

💾 Menos espacio

Un único store global. Adiós a tener el mismo node_modules de 300MB en 15 proyectos diferentes.

Consejo

Lo del bloqueo de 24 horas es perfecto porque si un atacante publica un paquete envenenado a las 10 de la mañana, los bots de seguridad y la comunidad suelen pillarlo en cuestión de horas. Para cuando tú vayas a instalarlo, PNPM ya te lo bloquea por defecto.


Guía para migrar en Linux Mint de NPM a PNPM paso a paso

Si estás en Linux Mint (o Ubuntu, Debian, lo que sea) estos son los comandos que yo he ejecutado para comenzar a usar pnpm en lugar de npm.

1. Instalación limpia con corepack

NO vamos a instalar PNPM usando el propio NPM. Vamos a usar , que viene de serie con Node.js:

~/ 0 / 5
$
Pulsa para ejecutar el siguiente comando

Y EA, pnpm 11 instalado sin tocar npm.

2. El truco de seguridad con el alias NPM en .bashrc

Esto es importante porque llevamos años escribiendo de forma automática npm install sin pensar y un día se te escapa en un proyecto random y se te instala el una librería con dependencias infectadas y se ha liao parda.

Para evitarlo, vamos a hacer que cuando escribas npm se ejecute pnpm automáticamente. Abre el .bashrc (si usas bash, si no el config del que uses):

nano ~/.bashrc

Y al final del archivo añade esto:

# baibai npm
alias npm="pnpm"
alias npx="pnpm dlx"

Aplica los cambios sin reiniciar la terminal:

source ~/.bashrc

A partir de ahora si escribes npm install lo que se va a ejecutar realmente es pnpm install.

Nota

Si usas zsh en lugar de bash, el archivo es ~/.zshrc y la sintaxis del alias es exactamente la misma.

3. Migrando proyectos existentes

Cuando entres en un proyecto viejo no mezcles gestores. No te quedes con el package-lock.json de NPM y a la vez pnpm-lock porque te vas a volver majareta, mejor haz limpieza:

# Desde la raíz del proyecto
rm -rf node_modules package-lock.json
pnpm install

Si el proyecto tenía un yarn.lock, también fuera:

rm -rf node_modules yarn.lock package-lock.json
pnpm install
Importante

Cuando hagas commit, añade el pnpm-lock.yaml al repo y borra el package-lock.json si seguía ahí. Si trabajas en equipo, avisa a la gente de que ahora se usa pnpm, porque si alguien hace npm install se va a generar el package-lock otra vez y vuelta a empezar.


Mi experiencia tras el cambio

Al principio PNPM puede ser un poco estricto y te suelta cosas que con NPM no veías. Por ejemplo, migrando este mismo blog en Astro 6 me saltaron warnings de dependencias como zod que NPM me estaba instalando por debajo sin yo declararlas en mi package.json.

Lo que pasa cuando te pasas a PNPM
  • Ves de verdad qué dependencias tienes en tu package.json
  • Te ahorras gigas de disco con el store global compartido
  • Instalaciones más rápidas, sobre todo en proyectos grandes
  • Bloqueo automático de paquetes recién publicados (24h)
  • Sin scripts postinstall ejecutándose a tus espaldas
Lo que dejas atrás de NPM
  • Dependencias fantasma (las que usabas sin declararlas)
  • node_modules de 500MB repetidos en cada proyecto
  • npm install muchas veces tarda bastante
  • Confiar en que ningún paquete de la cadena tenga un rm -rf escondido

¿Es un problema tener que declarar las dependencias bien? Al revés, nene, es una ventaja. Ahora sé exactamente qué hay en mi package.json, sin sorpresas. Es un sistema más limpio, más rápido y, sobre todo, mucho más seguro.


El vídeo de Midu (vale mucho la pena verlo)

Si quieres la explicación completa con todos los detalles del ataque a TanStack, te dejo el vídeo aquí. Midu lo explica muy bien, como siempre.

Conclusiones finales

A día de hoy seguir usando npm por defecto es como dejar la puerta de casa abierta y rezar para que nadie entre. Funciona, sí, pero hasta que un día no funciona y se te lleva por delante el disco duro o los tokens/keys de la empresa.

PNPM 11 te da prácticamente las mismas funcionalidades, más velocidad, menos espacio y, lo más importante, seguridad. La migración se hace muy muy rápido. El alias en .bashrc te quita la tentación de volver a NPM por costumbre y los proyectos viejos se migran con un rm -rf node_modules && pnpm install.

Nos vemos en los bares! 🍻