Back

Comandos esenciales de npm que todo desarrollador debería conocer

Comandos esenciales de npm que todo desarrollador debería conocer

Probablemente uses npm install y npm run dev todos los días sin pensarlo dos veces. Pero la CLI de npm tiene un conjunto de herramientas mucho más profundo que puede ahorrarte tiempo real — ya sea que estés depurando un árbol de dependencias roto, auditando vulnerabilidades o ejecutando un script puntual. Esta guía cubre los comandos esenciales de npm y los patrones de flujo de trabajo modernos que deberían formar parte de la práctica diaria de cada desarrollador.

Puntos clave

  • npm install, npm uninstall y npm outdated forman el núcleo de la gestión diaria de dependencias.
  • Usa npm ls, npm explain y npm query para inspeccionar y depurar tu árbol de dependencias.
  • npm audit, npm sbom y npm diff te proporcionan herramientas prácticas para seguridad y transparencia en la cadena de suministro.
  • El campo overrides en package.json te permite fijar dependencias transitivas sin esperar correcciones upstream.
  • Pasar flags a través de scripts con -- y ejecutar binarios puntuales con npm exec optimizan flujos de trabajo comunes.

Instalación y gestión de dependencias

El comando fundamental de la gestión de dependencias en npm es npm install. Ejecútalo sin argumentos para sincronizar tu node_modules local con package-lock.json. Añade un nombre de paquete para instalar algo nuevo:

npm install react            # runtime dependency
npm install vite --save-dev  # dev-only dependency

Para eliminar un paquete de forma segura y limpiar package.json al mismo tiempo:

npm uninstall lodash

Para verificar qué está desactualizado en tu proyecto:

npm outdated

Esto te proporciona una tabla clara de las versiones actual, deseada y más reciente — útil antes de decidir qué actualizar y cuándo.

Ejecución de scripts y paso de flags

npm run sin argumentos lista todos los scripts definidos en tu package.json. Muy útil cuando estás explorando un proyecto desconocido.

Cuando necesites pasar flags al script subyacente, usa -- para separarlos:

npm run build -- --watch --mode=development

Todo lo que viene después de -- se reenvía directamente al script, permitiéndote ajustar el comportamiento sin tocar package.json.

Inspección del árbol de dependencias

Dos comandos que los desarrolladores deberían conocer para depurar problemas de dependencias son npm ls y npm explain (también con el alias npm why).

npm ls muestra tu árbol completo de dependencias. Pasa un nombre de paquete para filtrar:

npm ls ms

npm explain te dice por qué un paquete específico está instalado — qué dependencia directa lo incluyó:

npm explain ms@0.7.1

Para filtrado más avanzado, npm query te permite buscar dependencias usando un DSL estilo selectores CSS. Por ejemplo, para encontrar todos los paquetes que definen un script postinstall (una verificación de seguridad útil):

npm query ":attr(scripts, [postinstall])"

Ejecución de paquetes sin instalarlos

npm exec ejecuta un binario de paquete usando las dependencias locales de tu proyecto, o descarga temporalmente el paquete si aún no está instalado. En versiones modernas de npm, el comando npx delega a npm exec internamente.

npm exec -- create-react-app my-app

Respeta primero el node_modules local de tu proyecto, haciendo el comportamiento más predecible que recurrir a una instalación global.

Comandos de npm enfocados en seguridad

npm audit escanea tu árbol de dependencias contra bases de datos de vulnerabilidades conocidas e imprime un reporte clasificado por severidad:

npm audit
npm audit fix          # auto-corrige actualizaciones seguras
npm audit fix --force  # aplica correcciones con cambios breaking (prueba exhaustivamente después)

Para transparencia en la cadena de suministro, npm sbom genera una Lista de Materiales de Software (Software Bill of Materials) — un inventario completo de las dependencias de tu proyecto en formato legible por máquina:

npm sbom > sbom.json

Esta salida puede alimentarse directamente a herramientas de seguridad como Snyk para un escaneo de vulnerabilidades más profundo.

Para comparar qué cambió realmente entre dos versiones de un paquete antes de actualizar:

npm diff --diff=ms@2.1.2 --diff=ms@2.1.3

La salida refleja git diff, facilitando detectar cambios inesperados antes de que lleguen a tu proyecto.

Fijación de dependencias transitivas

Cuando una vulnerabilidad existe en una dependencia transitiva que no controlas directamente, usa el campo overrides en package.json para forzar una versión específica:

"overrides": {
  "node-ipc": "9.2.1"
}

Ten en cuenta que overrides está soportado en npm v8.3 y versiones posteriores. Si estás usando Yarn, la característica equivalente es resolutions. Este enfoque es una de las formas más prácticas de mantener un árbol de dependencias seguro sin esperar a los mantenedores upstream.

Conclusión

La mayoría de los desarrolladores solo rascan la superficie de lo que npm puede hacer. Los comandos cubiertos aquí — desde npm explain y npm query hasta npm sbom y overrides — cierran la brecha entre el uso básico y un flujo de trabajo genuinamente eficiente. Comienza con los que coincidan con tus puntos de dolor actuales, y construye desde ahí.

Preguntas frecuentes

npm exec es el comando integrado introducido en npm v7 que ejecuta binarios de paquetes, y es a lo que npx delega internamente en versiones modernas de npm. La diferencia clave es que npm exec verifica primero tu node_modules local, proporcionándote un comportamiento más predecible. Para la mayoría de las tareas cotidianas, los dos son intercambiables, pero npm exec es el enfoque recomendado de ahora en adelante.

Ejecuta npm audit fix para aplicar automáticamente actualizaciones seguras y compatibles con semver. Si una corrección requiere un cambio de versión mayor, usa npm audit fix --force, pero prueba tu aplicación exhaustivamente después ya que pueden introducirse cambios breaking. Para problemas de dependencias transitivas fuera de tu control directo, usa el campo overrides en package.json para fijar una versión parcheada.

Usa overrides cuando existe una vulnerabilidad o bug en una dependencia transitiva y la dependencia directa que la incluye aún no ha lanzado una corrección. Fuerza a npm a resolver una versión específica de ese paquete anidado. Esta característica requiere npm v8.3 o posterior. Siempre prueba después de aplicar un override, ya que forzar una versión puede causar problemas de compatibilidad.

Ejecuta npm explain seguido del nombre y versión del paquete, por ejemplo npm explain ms@0.7.1. Esto imprime la cadena completa de dependencias que causó la instalación del paquete. También puedes usar la forma abreviada npm why. Para una vista más amplia de todo tu árbol de dependencias, usa npm ls con un filtro opcional de nombre de paquete.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay