Dependencies vs devDependencies: qué instalar y dónde

Aprende la diferencia entre dependencies y devDependencies, cuándo usar cada una y cómo afectan al resultado final de tu proyecto. Un error común es mezclar dependencias de producción con desarrollo.

Una de las decisiones más importantes al trabajar con npm es dónde colocar cada paquete. ¿En dependencies o en devDependencies? Esta elección parece trivial pero tiene consecuencias reales: tamaño del bundle, seguridad, rendimiento en producción y experiencia de desarrollo.

En esta lección vas a entender claramente la diferencia entre ambos tipos de dependencias, con ejemplos prácticos de cuándo usar cada uno. El objetivo es que cuando instales un paquete, sepas exactamente qué flag usar y por qué.

Al terminar, instalarás dependencias de forma consciente, optimizando tanto el desarrollo como el resultado final de producción.

  • Dependencies son los paquetes que tu aplicación necesita para funcionar.
  • Las dependencies son librerías que tu aplicación necesita en tiempo de ejecución. Si alguien instala tu proyecto como dependencia o despliega tu aplicación a producción, estas librerías deben estar presentes para que todo funcione.
  • Ejemplos claros: un framework como Express, una librería de fechas como date-fns, un cliente HTTP como axios, o una utilidad de fechas como moment. Todas estas son necesarias cuando tu código se ejecuta.
  • Se instalan con npm install (sin flags)
  • Están disponibles en producción

Qué son las dependencies

Dependencies son los paquetes que tu aplicación necesita para funcionar.

Las dependencies son librerías que tu aplicación necesita en tiempo de ejecución. Si alguien instala tu proyecto como dependencia o despliega tu aplicación a producción, estas librerías deben estar presentes para que todo funcione.

Ejemplos claros: un framework como Express, una librería de fechas como date-fns, un cliente HTTP como axios, o una utilidad de fechas como moment. Todas estas son necesarias cuando tu código se ejecuta.

  • Se instalan con npm install (sin flags)
  • Están disponibles en producción
  • Son necesarias para que la app funcione

Qué son las devDependencies

devDependencies son herramientas que solo necesitas durante el desarrollo.

Las devDependencies son paquetes que usas mientras desarrollas pero que no son necesarios cuando la aplicación está en producción. Esto incluye herramientas de testing (Jest, Mocha), linters (ESLint), bundlers (Webpack, Vite), preprocesadores y cualquier utilidad que solo se ejecuta en tu entorno local.

Cuando alguien instala tu proyecto solo para usarlo como dependencia, npm install --production omite las devDependencies, reduciendo el tamaño de la instalación.

  • Se instalan con npm install -D o --save-dev
  • Solo necesarias en entorno de desarrollo
  • No se instalan en producción con --production

Ejemplos prácticos: ¿dónde va cada paquete?

Tabla de referencia rápida para decidir correctamente.

La mejor forma de internalizar la diferencia es ver ejemplos reales. React como framework va en dependencies (la app lo necesita). Create React App como herramienta de build va en devDependencies (solo la usas para generar el proyecto).

Esta decisión afecta directamente al tamaño de producción y a la seguridad. Paquetes innecesarios en producción aumentan la superficie de ataque y el tiempo de despliegue.

  • En dependencies: React, Express, Lodash, Axios, moment, chalk (si lo usas en app)
  • En devDependencies: Jest, ESLint, Webpack, Vite, TypeScript, Babel, nodemon

Cómo afectan al instalar en producción

npm install se comporta diferente según el flag --production.

Cuando ejecutas npm install sin flags, se instalan tanto dependencies como devDependencies. Pero cuando ejecutas npm install --production o estableces NODE_ENV=production, npm ignora las devDependencies.

Esto es útil para Docker y despliegues: reduces tamaño de imagen y tiempo de instalación porque no instalas herramientas que no necesitas en producción.

Peer dependencies: cuando tu paquete necesita otros

Las peer dependencies son dependencias que el usuario de tu paquete debe instalar.

Las peer dependencies son un concepto diferente: en lugar de requerir que alguien instale algo, le dices 'yo funciono con esta versión de React, instálala tú'. Se definen en el campo peerDependencies y npm muestra warnings si no están instaladas.

Esto es común en librerías de componentes: 'mi-ui-library funciona con React 18, instálalo en tu proyecto'.

NPM
04

Dependencies vs devDependencies: qué instalar y dónde

Aprende la diferencia entre dependencies y devDependencies, cuándo usar cada una y cómo afectan al resultado final de tu proyecto. Un error común es mezclar dependencias de producción con desarrollo.

Código del tema: npm install

📘 Teoría

Qué son las dependencies

Dependencies son los paquetes que tu aplicación necesita para funcionar.

Las dependencies son librerías que tu aplicación necesita en tiempo de ejecución. Si alguien instala tu proyecto como dependencia o despliega tu aplicación a producción, estas librerías deben estar presentes para que todo funcione.

Ejemplos claros: un framework como Express, una librería de fechas como date-fns, un cliente HTTP como axios, o una utilidad de fechas como moment. Todas estas son necesarias cuando tu código se ejecuta.

  • Se instalan con npm install (sin flags)
  • Están disponibles en producción
  • Son necesarias para que la app funcione

Qué son las devDependencies

devDependencies son herramientas que solo necesitas durante el desarrollo.

Las devDependencies son paquetes que usas mientras desarrollas pero que no son necesarios cuando la aplicación está en producción. Esto incluye herramientas de testing (Jest, Mocha), linters (ESLint), bundlers (Webpack, Vite), preprocesadores y cualquier utilidad que solo se ejecuta en tu entorno local.

Cuando alguien instala tu proyecto solo para usarlo como dependencia, npm install --production omite las devDependencies, reduciendo el tamaño de la instalación.

  • Se instalan con npm install -D o --save-dev
  • Solo necesarias en entorno de desarrollo
  • No se instalan en producción con --production
Instalar como devDependency
# Instalar Jest como dependencia de desarrollo
npm install --save-dev jest

# Equivalente con flag corto
npm i -D jest

Ejemplos prácticos: ¿dónde va cada paquete?

Tabla de referencia rápida para decidir correctamente.

La mejor forma de internalizar la diferencia es ver ejemplos reales. React como framework va en dependencies (la app lo necesita). Create React App como herramienta de build va en devDependencies (solo la usas para generar el proyecto).

Esta decisión afecta directamente al tamaño de producción y a la seguridad. Paquetes innecesarios en producción aumentan la superficie de ataque y el tiempo de despliegue.

  • En dependencies: React, Express, Lodash, Axios, moment, chalk (si lo usas en app)
  • En devDependencies: Jest, ESLint, Webpack, Vite, TypeScript, Babel, nodemon

Cómo afectan al instalar en producción

npm install se comporta diferente según el flag --production.

1

Cuando ejecutas npm install sin flags, se instalan tanto dependencies como devDependencies. Pero cuando ejecutas npm install --production o estableces NODE_ENV=production, npm ignora las devDependencies.

2

Esto es útil para Docker y despliegues: reduces tamaño de imagen y tiempo de instalación porque no instalas herramientas que no necesitas en producción.

Instalar solo producción
# Instalar solo dependencies (para producción)
npm install --production

# O alternativamente
NODE_ENV=production npm install

Peer dependencies: cuando tu paquete necesita otros

Las peer dependencies son dependencias que el usuario de tu paquete debe instalar.

Las peer dependencies son un concepto diferente: en lugar de requerir que alguien instale algo, le dices 'yo funciono con esta versión de React, instálala tú'. Se definen en el campo peerDependencies y npm muestra warnings si no están instaladas.

Esto es común en librerías de componentes: 'mi-ui-library funciona con React 18, instálalo en tu proyecto'.

Ejemplo de peerDependencies
{
  "name": "mi-componente-react",
  "version": "1.0.0",
  "peerDependencies": {
    "react": ">=18.0.0",
    "react-dom": ">=18.0.0"
  }
}

🧪 Aprende probando

Ejemplo Ejemplo: decidir dónde va cada paquete Clasifica estos paquetes: react, jest, webpack, axios, typescript.

🏁 Retos

Reto Reto 1: Clasificar dependencias Instala los paquetes correctos en el lugar correcto.
Reto Reto 2: Simular instalación de producción Verifica cómo npm install --production omite devDependencies.

🧰 Recursos

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .