🇺🇸 EN
Frontend
·5 min read·↗·🇺🇸 EN

Por qué me estoy cambiando de npm a pnpm

Portada principal del artículo: Por qué me estoy cambiando de npm a pnpm
Foto en Unsplash

¿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:

  1. 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.
  2. 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 tu package.json. Se acabaron las vulnerabilidades ocultas colándose a través de carpetas anidadas.
  3. 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

Parte de la serie Frontend

Modern frontend development — Angular, React, TypeScript, accessibility, and performance.

Ver serie completa

Artículos Relacionados

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.

User avatar
User avatar
User avatar
User avatar
+13K

Únete a 13,800+ desarrolladores y lectores.

Cero spam. Cancela tu suscripción en cualquier momento.