TUI interactivo para gestionar actualizaciones de dependencias npm. Detecta vulnerabilidades, respeta tu versión de Node, y te deja elegir qué actualizar.
Lee tu package-lock.json, consulta el npm registry de forma concurrente, detecta vulnerabilidades vía la base de datos OSV (incluye GitHub Security Advisories), y presenta un TUI interactivo para elegir qué actualizar.
.nvmrc → .node-version → node --version). Una versión parcial (ej. 20) se resuelve a tu node activo si es de esa línea, o a la última release de esa línea en nodejs.org.npmrc de usuario y de proyecto: registry, registries por scope (@scope:registry=) y _authToken con expansión de ${ENV_VAR}. Un token de una ruta padre aplica a todos los registries bajo ella, igual que en npmpackage-lock.json v1/v2/v3 y package.jsonnpm install separando prod/dev y manteniendo el estilo de rango de cada dependencia (^/~/exacta)--unusedDentro de cualquier proyecto Node.js con package-lock.json:
| Flag | Tipo | Descripción |
|---|---|---|
| --prod-only | bool | Solo revisa dependencias de producción (excluyente con --dev-only) |
| --dev-only | bool | Solo revisa dependencias de desarrollo (excluyente con --prod-only) |
| --unused | bool | Detecta dependencias no usadas en el código y permite desinstalarlas (combinable con --json) |
| --json | bool | Output en JSON por stdout, sin TUI (el progreso va a stderr) |
| --no-color | bool | Desactiva colores y emojis (equivale a NO_COLOR=1) |
| --version | bool | Muestra versión, commit y fecha de build, y sale |
| --help, -h | — | Muestra la ayuda |
| Tecla | Pantalla | Acción |
|---|---|---|
| ↑ / k, ↓ / j | selector | Navegar |
| space / tab | selector | Marcar / desmarcar paquete |
| a | selector | Marcar todos |
| p | selector | Solo updates patch |
| m | selector | Patch + minor |
| v | selector | Expandir vulnerabilidades (cuando hay más de 3) |
| enter | selector | Confirmar selección |
| q / esc / ctrl+c | selector | Salir |
| y · n / q / esc | confirmación | Ejecutar · cancelar |
El TUI de --unused usa los mismos atajos, sin p, m ni v.
Cuando la última versión de un paquete requiere un Node más nuevo del que tienes activo, packwatch no la sugiere. En vez de eso, recorre versiones de la más nueva a la más antigua y sugiere la mejor compatible con tu Node:
Si ya estás en la versión compatible más nueva, el paquete aparece como held back en vez de ofrecer un update que rompería:
@types/node se mantiene en el major de Node que apunta tu proyecto: el mínimo de engines.node o, si no está definido, tu Node activo.
Si engines.node no acepta tu Node activo, packwatch lo advierte al inicio.
Las peerDependencies se revisan en ambas direcciones y sobre todo el plan de updates. Paquetes que se fijan mutuamente (ej. vitest y @vitest/coverage-v8, react y react-dom) se evalúan juntos y se marcan update together: seleccionar uno selecciona a sus pares, y packwatch agrega cualquier par faltante antes de correr npm install.
Nunca sugiere versiones deprecadas ni por encima del dist-tag latest.
packwatch --unused escanea tu código (import/require, incluidos los nombres cortos de plugins de ESLint) y lista las dependencias directas que no se usan. Puedes elegir cuáles desinstalar desde el TUI.
Usa --json para CI pipelines o scripting. Stdout contiene solo el documento JSON; el progreso y los mensajes van a stderr:
El documento trae packwatchVersion, nodeVersion y packages[]. Cada paquete incluye name, installed, available, updateType, isDev,
nodeWarning, peerWarning, compatVersion, requiresWith, vulnCount, vulnSeverity, vulnFixedByUpdate y vulnerabilities[].
Con --unused: packwatchVersion, unusedPackages[], totalDependencies y scannedFiles.
react + react-dom): se sugieren juntos, se marcan update together y se auto-seleccionan los pares. @types/node se mantiene en el major de Node del proyecto (engines.node o el Node activo). .npmrc se resuelven subiendo por la ruta del registry, como npm — arregla registries privados tipo JFrog. .nvmrc/.node-version (ej. 20) se resuelven a una release real. npm install mantiene el estilo de rango declarado (^, ~, exacto). latest. --json, stdout solo lleva JSON y el progreso va a stderr. --unused resuelve los nombres cortos de plugins/configs de ESLint — menos falsos positivos. --unused para detectar y desinstalar dependencias no usadas, con TUI propio y salida --json. setup-go pasa a v6. .npmrc, lockfile v1/v2/v3, fetch concurrente y chequeo de seguridad. --prod-only, --dev-only, --json, --no-color y --version.