JS: Configuración del entorno

Teoría: Dependencias para el desarrollo

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ónSe instalan siempre a menos que digamos lo contrario
Dependencias de desarrollo (devDependencies)Solo las usamos mientras desarrollamosSe 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-dev para instalarlas.
  • En producción, se recomienda usar npm ci --production o npm install --production para 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.

Completado

0 / 11