Archivo package.json en NodeJS

Archivo package.json en NodeJS

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