Por qué me estoy cambiando de npm a pnpm
¿Has visto las noticias últimamente? El ecosistema de JavaScript acaba de sufrir un ataque masivo a la cadena de suministro. Docenas de paquetes se vieron comprometidos, incluyendo el popular TanStack router. Como explicó mi amigo midudev en su video reciente, no fue un simple fallo: el malware estaba robando activamente tokens de desarrolladores y borrando discos.
Esto nos deja una pregunta incómoda: ¿Es npm seguro por defecto?
Como vimos con este incidente, la configuración por defecto de npm nos deja vulnerables a este tipo de ataques a la cadena de suministro. Pero hay una mejor alternativa. Hoy vamos a hablar sobre por qué migrar a PNPM 11 no es solo una mejora de rendimiento, sino un cambio crítico de seguridad.
¿Y lo mejor de todo? Te voy a mostrar cómo migrar a todo tu equipo sin complicaciones.
Personalmente implementé este proceso para proteger mi propio flujo de trabajo y evitar que este tipo de ataques afecte a mis proyectos. Como trabajo tanto en Mac como en Windows, necesitaba una solución que funcionara a la perfección en ambos entornos, asegurando que mis herramientas estuvieran siempre actualizadas y seguras sin importar el sistema operativo.
¡Empecemos!
¿Por qué PNPM? La ventaja en seguridad y rendimiento
Si miras el análisis de midudev, entenderás por qué PNPM 11 es tan recomendado ahora mismo:
- Bloqueo automático de ataques: PNPM 11 ofrece funciones de seguridad mejoradas que bloquean muchos de los ataques habituales a la cadena de suministro de forma automática.
- Sin dependencias fantasma: A diferencia de npm, PNPM usa una estructura estricta en
node_modules. Tu código solo tiene acceso a lo que declaras explícitamente en tupackage.json. Se acabaron las vulnerabilidades ocultas colándose a través de carpetas anidadas. - Almacenamiento direccionable por contenido: PNPM guarda los paquetes en un único almacén global en tu equipo. Si tienes 10 proyectos de Angular, solo guardas los binarios una vez. Esto ahorra muchísimo espacio en disco y hace que las instalaciones sean ultra rápidas.
Piensa en PNPM como una caja fuerte inteligente para tus dependencias, en lugar del archivador desordenado que suele ser npm.
La estrategia: memoria muscular con alias
La parte más difícil de cambiar de herramienta es la memoria muscular. Escribimos npm install y npm start cientos de veces al día.
Para resolver esto, nuestra estrategia de migración usa alias. Vamos a mapear npm a pnpm. Tu cerebro sigue escribiendo npm, pero tu terminal ejecuta por debajo el seguro y rápido pnpm.
Aquí tienes los scripts para automatizar esta migración en tu equipo. Se pueden ejecutar varias veces sin riesgo (son idempotentes) e incluso te ofrecerán limpiar tu vieja caché de npm para recuperar espacio en disco.
Para macOS y Linux (Bash / Zsh)
Crea un archivo llamado migrate-to-pnpm.sh, pega este código y ejecútalo:
#!/bin/bash
# 1. Comprobar si pnpm ya está instalado
if command -v pnpm &> /dev/null; then
echo "✔ pnpm is already installed ($(pnpm -v))."
else
echo "📦 Installing pnpm..."
curl -fsSL https://get.pnpm.io/install.sh | sh -
fi
# 2. Determinar el archivo de configuración de la shell
SHELL_NAME=$(basename "$SHELL")
CONF_FILE="$HOME/.${SHELL_NAME}rc"
[ ! -f "$CONF_FILE" ] && CONF_FILE="$HOME/.zshrc"
# 3. Añadir alias de forma segura
if ! grep -q "alias npm='pnpm'" "$CONF_FILE"; then
echo -e "\n# pnpm Aliases\nalias npm='pnpm'\nalias npx='pnpm dlx'" >> "$CONF_FILE"
echo "✅ Aliases added to $CONF_FILE"
else
echo "ℹ️ Aliases already exist in $CONF_FILE."
fi
# 4. Preguntar si se desea limpiar la caché de npm
echo ""
read -p "Do you want to clear the old npm cache to save disk space? (y/n): " confirm
if [[ "$confirm" == [yY] || "$confirm" == [yY][eE][sS] ]]; then
echo "🧹 Cleaning npm cache..."
command npm cache clean --force &> /dev/null
echo "✨ Cache cleared."
else
echo "⏭️ Skipping cache clean."
fi
echo "--------------------------------------------------"
echo "🎉 Setup complete! Run: source $CONF_FILE"
echo "--------------------------------------------------"Para Windows (PowerShell)
Crea un archivo llamado migrate-to-pnpm.ps1 y ejecútalo:
# 1. Comprobar si pnpm ya está instalado
if (Get-Command pnpm -ErrorAction SilentlyContinue) {
Write-Host "✔ pnpm is already installed (version: $(pnpm -v))." -ForegroundColor Cyan
} else {
Write-Host "📦 Installing pnpm..." -ForegroundColor Yellow
iwr https://get.pnpm.io/install.ps1 -useb | iex
}
# 2. Configurar el perfil de PowerShell (Alias)
$PROFILE_PATH = $PROFILE
if (!(Test-Path $PROFILE_PATH)) {
$dir = Split-Path $PROFILE_PATH
if (!(Test-Path $dir)) { New-Item -Path $dir -ItemType Directory -Force }
New-Item -Path $PROFILE_PATH -ItemType File -Force
}
$ALIAS_CONTENT = @"
# pnpm Aliases
function npm-alias { pnpm `$args }
Set-Alias -Name npm -Value npm-alias -Option ReadOnly, AllScope -Force
function npx-alias { pnpm dlx `$args }
Set-Alias -Name npx -Value npx-alias -Option ReadOnly, AllScope -Force
"@
if (!(Select-String -Path $PROFILE_PATH -Pattern "function npm-alias" -Quiet)) {
Add-Content -Path $PROFILE_PATH -Value $ALIAS_CONTENT
Write-Host "✅ Aliases added to your profile." -ForegroundColor Green
}
# 3. Preguntar si se desea limpiar la caché de npm
Write-Host ""
$confirm = Read-Host "Do you want to clear the old npm cache? (y/n)"
if ($confirm -eq 'y') {
& "npm" cache clean --force
Write-Host "✨ Cache cleared." -ForegroundColor Green
}
Write-Host "--------------------------------------------------"
Write-Host "🎉 Setup complete! Restart your terminal or run: . `$PROFILE"
Write-Host "--------------------------------------------------"Mira, los recientes ataques de seguridad son una clara llamada de atención para todos nosotros. Tomarte solo un minuto para ejecutar estos scripts y cambiar a PNPM 11 no es únicamente para ahorrar espacio en disco. Se trata de mantener tu entorno de desarrollo protegido. Yo uso tanto Mac como Windows, y quiero que mis herramientas sean seguras en ambos sistemas. Es una de las mejores decisiones que puedes tomar para tu trabajo diario.
De verdad te animo a probar esto hoy mismo. Configura los alias, ejecuta npm install en tu proyecto de Angular favorito y comprueba los resultados. Es más rápido, es más seguro y, una vez que lo pruebes, no vas a querer volver atrás.
Nos vemos en el próximo post y, como siempre: ¡mantente seguro y sigue programando!
Foto de Brad Starkey en Unsplash
Modern frontend development — Angular, React, TypeScript, accessibility, and performance.
Artículos Relacionados
Protege tu API: Por qué necesitas Rate Limiting (y cómo implementarlo)
Le explicaba a un amigo por qué validar emails no es suficiente. Aprende a evitar que los bots tiren tu endpoint de suscripción usando Rate Limiting: desde una solución simple en memoria hasta una implementación robusta con Redis.
Prompt Injection en aplicaciones agénticas: 4 capas de defensa
Aprende a proteger tus agentes de IA usando una estrategia de defensa en profundidad con estas 4 capas de seguridad esenciales.
Compartir este artículo
Si esta guía te resultó útil, compártela con tu equipo o con otros desarrolladores.
Software real. Lecciones reales.
Comparto las lecciones que aprendí por las malas, para que puedas evitarlas o estar preparado cuando ocurran.
Únete a 13,800+ desarrolladores y lectores.
Cero spam. Cancela tu suscripción en cualquier momento.