5 - Uso de scripts y automatización

Objetivo del tema

En este módulo aprenderás a sacar partido de los scripts definidos en package.json para automatizar tareas con npm: ejecutar comandos con npm run, entender los scripts predefinidos, crear flujos personalizados y trabajar con variables de entorno de forma portable.

5.1 Ejecutar scripts con npm run

Los scripts se declaran dentro de la sección scripts del manifiesto del proyecto. Se ejecutan con el comando npm run nombre-script, que agrega automáticamente node_modules/.bin al PATH temporal, permitiendo invocar herramientas instaladas de forma local.

{
  "scripts": {
    "hola": "node scripts/saludar.js"
  }
}
npm run hola
    Ejecución de un script
  • La CLI muestra el comando antes de ejecutarlo, lo que facilita el seguimiento del flujo.
  • El código de salida del script se propaga a npm; un error detiene la ejecución y devuelve un estado diferente de cero.

5.2 Scripts predefinidos (start, test, build)

Algunos nombres de script tienen atajos especiales documentados en npm scripts. Los más habituales son:

  • start: ejecutado con solo npm start. Ideal para lanzar la aplicación principal.
  • test: se ejecuta con npm test. npm lo usa también antes de publicar paquetes.
  • build: muchas herramientas esperan este script para preparar artefactos de producción; se invoca manualmente con npm run build.
{
  "scripts": {
    "start": "node src/server.js",
    "test": "node --test",
    "build": "webpack --mode production"
  }
}

Si omites alguno de estos nombres, npm buscará binarios por defecto: por ejemplo, ejecutar npm test sin script intenta lanzar node test, así que siempre es recomendable definirlos de forma explícita.

5.3 Scripts personalizados para automatizar tareas

Los scripts permiten crear rutinas reproducibles para el equipo: desde ejecutar linters y formateadores hasta orquestar pipelines complejos. Puedes encadenar comandos con operadores del sistema (&&, ||) o apoyarte en herramientas como npm-run-all para correr tareas en paralelo o serie.

{
  "scripts": {
    "lint": "eslint ./src",
    "format": "prettier --write \"src/**/*.js\"",
    "prepare": "npm run lint && npm run test",
    "dev": "npm-run-all --parallel watch:*",
    "watch:server": "nodemon src/server.js",
    "watch:assets": "webpack --watch"
  }
}
  • Usa nombres descriptivos para que el objetivo del script sea evidente.
  • Centraliza en los scripts cualquier comando que deba ejecutar el equipo o una integración continua.
  • Aprovecha el script prepare si necesitas correr tareas automáticas después de instalar dependencias (por ejemplo, generar artefactos o compilar código fuente).

5.4 Uso de variables de entorno en scripts

Muchos flujos requieren configurar variables de entorno antes de ejecutar una tarea. Puedes definirlas directamente en el script; npm las expone al proceso hijo según la sintaxis del sistema operativo.

# Sintaxis POSIX (Linux/macOS)
NODE_ENV=production npm run build

# Sintaxis PowerShell (Windows moderno)
$env:NODE_ENV = "production"; npm run build

Para escribir scripts portables que funcionen igual en Windows y sistemas POSIX, utiliza utilidades como cross-env, que se ejecuta como un binario dentro de tus scripts.

{
  "scripts": {
    "build": "cross-env NODE_ENV=production webpack --mode production",
    "start": "cross-env PORT=4000 node src/server.js"
  }
}

Recuerda no exponer credenciales sensibles directamente en el repositorio. Para valores secretos utiliza variables definidas en el entorno de despliegue o archivos ignorados por tu sistema de control de versiones.

Resumen didáctico

Los scripts de npm son un punto central de automatización: simplifican comandos complejos, aportan atajos estándar y permiten trabajar con configuraciones enriquecidas mediante variables de entorno. Dominar estas prácticas mejora la consistencia de tu equipo y prepara el terreno para pipelines de integración continua.