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 de manifiesto de un proyecto NodeJS: contiene sus metadatos, dependencias, scripts y configuración básica. Se crea automáticamente al ejecutar «npm init» y almacena nombre, versión, descripción, punto de entrada, autor y licencia. Con «npm install», NPM lo lee e instala todas las librerías listadas en su versión correcta.

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

Álvaro Fontela, ponente de la masterclass «WordPress con IA»

Masterclass «WordPress con IA»

Por Álvaro Fontela

¡Ya estás dentro!

Tu registro se ha completado correctamente

En unos minutos recibirás en tu correo el acceso directo a la masterclass «WordPress con IA», impartida por Álvaro Fontela.

Además, ya estás dentro del sorteo de una de las 3 licencias de Novamira de por vida que regalamos.
También te avisaremos antes que a nadie cuando comiencen nuestros descuentos de Black Friday en hosting y VPS.

Mantente atento a tu bandeja de entrada: las ofertas estarán disponibles solo por tiempo limitado.

Visitar Raiola

MASTERCLASS GRATIS

Aprende a usar la IA en WordPress ahora mismo.

Te damos acceso a la grabación completa de la masterclass «WordPress con IA» de Álvaro Fontela. Además, tendrás acceso anticipado a los descuentos de Black Friday de Raiola Networks.

Acceso masterclass: disponible hasta el 22 de noviembre.

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