Archivo package.json en NodeJS

Archivo package.json en NodeJS

Compartir y resumir con IA (¡Elige tu favorita!):
Haz click en los botones de abajo para obtener un resumen del post. Fórmate con Raiola ¡En un futuro habrá más!

El archivo package.json es el archivo más importante de cualquier proyecto en NodeJS.
El package.json actúa como el archivo de identificación de tu aplicación (también llamado archivo de manifiesto), conteniendo toda la información esencial: metadatos, dependencias, scripts y configuración básica del proyecto.

Cuando inicializas un proyecto NodeJS ejecutando el comando "npm init", lo primero que se crea es precisamente este archivo package.json.
Es un archivo JSON estándar que contiene pares clave-valor con toda la información que NPM necesita para gestionar tu proyecto correctamente.

Este archivo almacena datos fundamentales sobre tu proyecto:

  • Nombre de la aplicación.

  • Versión actual.

  • Descripción.

  • Punto de entrada principal (normalmente index.js o app.js).

  • Autor

  • Licencia.

  • Palabras clave para facilitar la búsqueda en npmjs.com.

Pero lo más importante de todo lo que contiene el archivo package.json son las dependencias, ya que lista todas las librerías externas que tu aplicación necesita para funcionar.

Cuando ejecutas el comando "npm install" en la carpeta de tu proyecto, NPM lee automáticamente el archivo package.json y descarga todas las dependencias listadas.
Esto es fundamental porque significa que cualquier desarrollador puede clonar tu proyecto y tener todas las librerías necesarias instaladas con un solo comando.

En nuestro hosting NodeJS, por ejemplo, puedes utilizar la terminal SSH para gestionar estas dependencias. NPM leerá tu package.json y se encargará de instalar cada paquete en la versión correcta, evitándote el trabajo manual de revisar y descargar librerías una a una.

Una funcionalidad muy potente y práctica del package.json son los scripts personalizados. Puedes definir comandos que se ejecuten con el comando "npm run [nombre-script]".
Por ejemplo, puedes crear un script "start" para arrancar tu servidor, "test" para ejecutar las pruebas automáticas, o "build" para compilar tu aplicación.

 El package.json distingue entre dos tipos de dependencias:

  • "dependencies" son las librerías que tu aplicación necesita en producción.

  • "devDependencies" son herramientas que solo necesitas durante el desarrollo de la aplicación.

Esto nos permite optimizar el peso de tu aplicación en producción. Al desplegar la aplicación en un servidor o hosting en producción, NPM instalará solo las dependencias necesarias, ignorando las herramientas de desarrollo.

Sin el archivo package.json, gestionar las dependencias de un proyecto NodeJS sería prácticamente imposible. Tendrías que recordar manualmente qué librerías utilizas, en qué versiones específicas, y descargarlas una por una cada vez que configures el proyecto en un nuevo entorno.

A continuación, aquí tienes un ejemplo de archivo package.json de N8N:

{
  "name": "n8n",
  "version": "1.106.0",
  "description": "n8n Workflow Automation Tool",
  "main": "dist/index",
  "types": "dist/index.d.ts",
  "scripts": {
    "clean": "rimraf dist .turbo",
    "typecheck": "tsc --noEmit",
    "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && pnpm run build:data",
    "build:data": "node scripts/build.mjs",
    "buildAndDev": "pnpm run build && pnpm run dev",
    "dev": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch\" \"nodemon --delay 1\"",
    "dev:worker": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch\" \"nodemon worker\"",
    "dev:webhook": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch\" \"nodemon webhook\"",
    "format": "biome format --write .",
    "format:check": "biome ci .",
    "lint": "eslint . --fix",
    "start": "run-script-os",
    "start:default": "cd bin && ./n8n",
    "start:windows": "cd bin && n8n",
    "test": "pnpm test:sqlite",
    "test:dev": "N8N_LOG_LEVEL=silent DB_TYPE=sqlite jest --watch",
    "test:sqlite": "N8N_LOG_LEVEL=silent DB_TYPE=sqlite jest",
    "test:postgres": "N8N_LOG_LEVEL=silent DB_TYPE=postgresdb DB_POSTGRESDB_SCHEMA=alt_schema DB_TABLE_PREFIX=test_ jest --no-coverage",
    "test:mariadb": "N8N_LOG_LEVEL=silent DB_TYPE=mariadb DB_TABLE_PREFIX=test_ jest --no-coverage",
    "test:mysql": "N8N_LOG_LEVEL=silent DB_TYPE=mysqldb DB_TABLE_PREFIX=test_ jest --no-coverage",
    "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\""
  },
  "bin": {
    "n8n": "./bin/n8n"
  },
  "keywords": [
    "automate",
    "automation",
    "IaaS",
    "iPaaS",
    "n8n",
    "workflow"
  ],
  "engines": {
    "node": ">=20.19 <= 24.x"
  },
  "files": [
    "bin",
    "templates",
    "dist"
  ],
  "devDependencies": {
    "@biomejs/biome": "^1.9.0",
    "@n8n/eslint-config": "workspace:*",
    "@types/jest": "^29.5.3",
    "@types/node": "*",
    "@types/supertest": "^6.0.2",
    "cross-env": "^7.0.3",
    "jest": "^29.6.2",
    "jest-environment-jsdom": "^29.6.2",
    "jest-expect-message": "^1.1.3",
    "jest-junit": "^16.0.0",
    "nodemon": "^3.0.1",
    "typescript": "^5.0.0",
    "tsc-watch": "^6.0.0",
    "tsc-alias": "^1.8.0",
    "rimraf": "^5.0.0",
    "concurrently": "^8.0.0",
    "run-script-os": "^1.1.6"
  },
  "dependencies": {
    "@n8n/typeorm": "workspace:*",
    "@n8n/workflow": "workspace:*",
    "@n8n/nodes-base": "workspace:*",
    "express": "^4.18.2",
    "helmet": "^7.0.0",
    "compression": "^1.7.4",
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "sqlite3": "^5.1.6",
    "mysql2": "^3.6.0",
    "pg": "^8.11.0",
    "redis": "^4.6.0",
    "bcryptjs": "^2.4.3",
    "jsonwebtoken": "^9.0.0",
    "lodash": "^4.17.21",
    "axios": "^1.5.0",
    "winston": "^3.10.0"
  },
  "license": "SEE LICENSE IN LICENSE.md",
  "author": {
    "name": "Jan Oberhauser",
    "email": "jan@n8n.io"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/n8n-io/n8n.git"
  },
  "bugs": {
    "url": "https://github.com/n8n-io/n8n/issues"
  },
  "homepage": "https://n8n.io"
}

Si buscas un hosting con NPM para NodeJS, te ofrecemos nuestro hosting NodeJS: https://raiolanetworks.com/hosting-nodejs/

Álvaro Fontela

Álvaro Fontela

Consultor WordPress, además de CEO y cofundador de Raiola Networks. Autor del libro "Curso Práctico de WordPress" y speaker en congresos de marketing digital.

Autor

Guía de optimización web

por Álvaro Fontela

¡Ya formas parte de nuestra lista VIP!

Tu registro se ha completado correctamente.

En unos minutos recibirás en tu correo electrónico un archivo, elaborado por Álvaro Fontela, que te permitirá auditar tu web y optimizar su rendimiento.

Además, al unirte a la lista VIP del 12º aniversario de Raiola Networks, obtendrás acceso anticipado a todos los descuentos en nuestros planes de hosting y VPS, directamente en la bandeja de entrada de tu email.

Estas ofertas estarán disponibles por tiempo limitado.

Te enviaremos la masterclass al email con el que te has apuntado

12 años contigo

240 horas de descuentos y una guía para optimizar tu sitio web totalmente gratis

¡Apúntate ahora y sé el primero en acceder a descuentos exclusivos!
Obtendrás un bonus único y sorpresas por nuestro 12 aniversario.

  • Información básica sobre protección de datos:

    Responsable:

    RAIOLA NETWORKS, S.L.

    CIF: B27453489

    Avda de Magoi, 66, Semisótano, Dcha., 27002 Lugo (Lugo)

    Teléfono: +34 982776081

    e-mail: info@raiolanetworks.es

    Finalidad:

    Atender solicitudes de información, ejecución de la contratación de servicios y remisión de comunicaciones comerciales.

    Legitimación:

    Consentimiento del interesado y contratación de productos y/o servicios del Responsable.

    Destinatarios:

    No se ceden datos a terceros, salvo obligación legal.

    Personas físicas o jurídicas directamente relacionadas con el Responsable

    Encargados de Tratamiento adheridos al Privacy Shield.

    Derechos:

    Acceder, rectificar y suprimir los datos, portabilidad de los datos, limitación u oposición a su tratamiento, derecho a no ser objeto de decisiones automatizadas, así como a obtener información clara y transparente sobre el tratamiento de sus datos.

    Información adiccional:

    Para obtener información más detallada, puede consultar nuestra política de privacidad

*A partir del 1 de marzo, ya no será posible registrarse ni recibir la guía de optimización web.