- Entornos de desarrollo y de producción
- ¿Cómo se maneja esto en JavaScript?
- Agregar dependencias de desarrollo
- ¿Dónde usamos estas herramientas?
- Instalar dependencias en producción
Cuando empezamos un proyecto en JavaScript (o en cualquier otro lenguaje), es muy importante tener claro que vamos a trabajar con al menos dos entornos:
Un entorno de desarrollo, donde vamos escribiendo y probando el código en nuestros computadores.
Un entorno de producción, que es donde el código va a ejecutarse ya en la vida real, para los usuarios.
Aunque estos dos entornos pueden parecer parecidos al principio, en realidad tienen objetivos diferentes, y por eso también requieren herramientas distintas. Aquí te vamos a contar cómo manejar eso correctamente usando Node.js y npm.
Entornos de desarrollo y de producción
Veámoslo con un ejemplo real. Supongamos que estamos haciendo una aplicación en Node.js. Mientras estamos construyendo esa app en nuestro computador, necesitamos algunas herramientas que nunca van a ser necesarias una vez la aplicación esté en producción.
Por ejemplo:
- Frameworks para escribir pruebas automatizadas (como Jest)
- Revisores de código o linters (como ESLint)
Estas herramientas nos ayudan a escribir un mejor código, pero no hacen parte del producto final. Así que no tiene sentido que hagan parte del código que vamos a subir al servidor de producción, ya que solo ocupan espacio y pueden hacer más lento el despliegue.
¿Cómo se maneja esto en JavaScript?
En los proyectos de JavaScript que usan Node.js y npm, podemos separar los paquetes según su propósito dentro del archivo package.json.
| Tipo de dependencia | ¿Para qué se usa? | ¿Dónde se guarda? |
|---|---|---|
Dependencias normales (dependencies) |
Funcionamiento del programa en producción | Se instalan siempre a menos que digamos lo contrario |
Dependencias de desarrollo (devDependencies) |
Solo las usamos mientras desarrollamos | Se omiten en producción si usamos ciertos comandos |
Agregar dependencias de desarrollo
Cuando instalamos un paquete que solo vamos a usar mientras desarrollamos, debemos usar el flag --save-dev. Mira este ejemplo:
# Instalamos Jest, una herramienta para escribir pruebas automatizadas
npm install --save-dev jest
Otro ejemplo:
# Instalamos ESLint, una herramienta para revisar que el código esté bien escrito
npm install --save-dev eslint
Luego, en el archivo package.json vamos a ver algo como esto:
"devDependencies": {
"jest": "^26.4.1",
"eslint": "^8.0.0"
}
¿Y cómo se diferencian de las dependencias normales?
Las dependencias para producción se instalan con este comando:
npm install nombre-del-paquete
Sin el --save-dev. Estas van en la sección "dependencies" del package.json y son fundamentales para que la aplicación funcione correctamente cuando esté en producción.
¿Dónde usamos estas herramientas?
Esas herramientas de desarrollo normalmente se usan en archivos o carpetas distintas del programa principal. Por ejemplo:
Las pruebas suelen ir en una carpeta llamada
tests/Los linters solo se ejecutan en el desarrollo, antes de subir los cambios
Por eso, estas dependencias no se cargan durante la ejecución de la aplicación en producción.
👉 Revisa este proyecto de ejemplo que ya tiene configuradas las devDependencies: Repositorio en GitHub
Instalar dependencias en producción
Cuando subimos nuestro proyecto a un servidor (por ejemplo, usando GitHub Actions o Docker), no queremos perder tiempo ni espacio instalando herramientas de desarrollo. Por eso usamos uno de estos dos comandos:
Opción 1: instalar solo las dependencias necesarias
npm install --production
Este comando solo instala lo que esté en "dependencies", ignorando lo que esté en "devDependencies".
Opción 2: usar una variable de entorno
También puedes decirle a npm que es un entorno de producción usando una variable de entorno:
NODE_ENV=production npm install
Opción recomendada: instalación limpia para producción
Una opción mucho mejor para producción es usar:
npm ci --production
El comando npm ci:
Instala exactamente las versiones que aparecen en
package-lock.json.Es más rápido.
Reduce las posibilidades de errores.
Ideal para ambientes como servidores o integraciones continuas.
Resumen
- Los entornos de desarrollo y producción tienen necesidades diferentes.
- Las herramientas como linters y frameworks de pruebas se instalan como devDependencies.
- Usamos
npm install --save-devpara instalarlas. - En producción, se recomienda usar
npm ci --productiononpm install --productionpara evitar instalar lo que no se necesita. - Organizar bien tus dependencias hace que tus proyectos sean más livianos, rápidos y seguros cuando se despliegan.
- Saber esto desde el inicio te va a ayudar muchísimo a entender mejor cómo funcionan los proyectos en Node.js y qué significan esos apartados en
package.json.
Trabajo independiente
🔍 Diferencias entre dependencias de desarrollo y producción en Node.js
Vamos a clonar un proyecto de ejemplo para entender qué pasa cuando instalas dependencias en modo desarrollo y en modo producción.
1️⃣ Clona el proyecto:
git clone https://github.com/hexlet-boilerplates/nodejs-package.git cd nodejs-package
2️⃣ Instala las dependencias (modo desarrollo):
npm install
3️⃣ Prueba que funciona:
bin/nodejs-package.js 10
👉 Verás un número en la pantalla (el resultado de la operación).
4️⃣ Ejecuta las pruebas:
npm test
5️⃣ Explora el proyecto:
- Abre el archivo
package.jsony mira las seccionesdependenciesydevDependencies. - Revisa las carpetas
srcy__tests__para ver el código y las pruebas.
6️⃣ Compara tamaños:
En Ubuntu o Mac puedes ver el tamaño de node_modules con:
du -sh node_modules
Luego borra y reinstala solo dependencias de producción:
rm -rf node_modules npm install --production du -sh node_modules
En Windows puedes usar dir /s node_modules desde PowerShell, aunque el formato será diferente.
💡 Verás que el tamaño es menor: no se instalaron herramientas de pruebas ni utilidades solo necesarias para desarrollo.
ℹ️ Este es un proyecto de ejemplo solo para explorar cómo funcionan las dependencias de desarrollo. Una vez termines de probarlo, puedes volver a tu proyecto codica-js para seguir trabajando ahí.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.