Configuración base para proyectos Node.js + TypeScript enfocada en seguridad de dependencias (supply-chain) y builds reproducibles.
⚠️ Este setup está pensado para entornos profesionales (APIs, SaaS, producción).
- ❌ No confiar en dependencias nuevas automáticamente
- ❌ No ejecutar código de terceros sin control
- ✅ Builds reproducibles (mismo resultado siempre)
- ✅ Minimizar superficie de ataque
👉 No usar npm directamente 👉 Usar mínimo pnpm
{
"packageManager": "pnpm@9.0.0"
}✔ Asegura misma versión en todo el equipo ✔ Evita inconsistencias
Muchos ataques vienen de:
preinstallpostinstallinstall
Ejemplo real: crypto miners, robo de tokens, backdoors.
npm config set ignore-scripts true
npm config get ignore-scriptspnpm config set ignore-scripts true
pnpm config get ignore-scriptsAlgunos paquetes necesitan scripts:
bcryptsharpesbuildprisma
👉 En esos casos, usar whitelist (pnpm):
{
"pnpm": {
"onlyBuiltDependencies": [
"bcrypt"
]
}
}Evita instalar versiones nuevas potencialmente comprometidas.
pnpm config set minimum-release-age 4320
pnpm config get minimum-release-age👉 4320 = 3 días
👉 recomendado:
- 1440 → flexible
- 4320 → balance 🔥
- 10080 → estricto
Evita upgrades automáticos (^ o ~).
npm config set save-prefix=''pnpm config set save-prefix=''✔ Guarda versiones exactas:
"express": "5.2.1"- npm →
package-lock.json - pnpm →
pnpm-lock.yaml
👉 SIEMPRE commitear
pnpm install --frozen-lockfile✔ Instala exactamente lo definido ✔ Falla si hay inconsistencias
Configuración base recomendada:
ignore-scripts=true
save-exact=true
minimum-release-age=1440
block-exotic-subdeps=true
trust-policy=no-downgradeignore-scripts→ bloquea scripts peligrosossave-exact→ versiones exactasminimum-release-age→ evita paquetes nuevosblock-exotic-subdeps→ bloquea dependencias raras (git, tarballs, etc.)trust-policy=no-downgrade→ evita downgrade malicioso
Forzar versiones seguras:
{
"pnpm": {
"overrides": {
"lodash": "4.17.21",
"minimist": "1.2.8"
}
}
}✔ Protege incluso sub-dependencias
pnpm auditOpcional:
pnpm audit --fixpnpm install --frozen-lockfile --ignore-scripts✔ Máxima seguridad ✔ Sin ejecución de código externo
- No instalar librerías innecesarias
- Preferir código propio cuando sea simple
- GitHub stars
- Último update
- Issues
- Maintainers
- URLs directas (
git+https) - paquetes sin mantenimiento
- forks desconocidos
.nvmrc
v20.11.0
✔ pnpm como estándar ✔ ignore-scripts activado ✔ minimum-release-age configurado ✔ versiones exactas ✔ lockfile obligatorio ✔ overrides para vulnerabilidades
Con esta configuración tienes:
- 🔒 Protección contra supply-chain attacks
- 🔁 Builds reproducibles
- 🧱 Control total de dependencias
- ⚡ Base lista para producción
Este setup está pensado para proyectos donde la seguridad no es opcional.