¿Qué es el package.json y cómo funciona?

Haremos una introducción al package.json usado en nuestro proyectos NodeJs.

Rodríguez Patiño, Eduardo
2020-09-27 | 441 lecturas

Es muy probable que en alguna etapa de nuestra vida de programadores nos hayamos topado con un archivo package.json y nos haya llamado la atención ¿qué es o para que sirve?, o tal vez solo lo ignoramos porque era irrelevante en ese momento. No importa que pasó por tu mente en ese momento porque si llegaste a esta entrada es porque te interesa conocer más de este.

Package.json

Vamos a definirlo como un archivo de definición o manifiesto para nuestro proyecto, en el cual especificamos referencias al proyecto como: autor, repositorio, versión y sobre todo las dependencias, entre otros.

Analicemos un package.json para entender como trabaja.

{
  "name": "kodoti", // nombre del proyecto
  "version": "1.0.0", // versión de nuestro proyecto
  "description": "", // descripción del proyecto
  "main": "app.js", // archivo principal que ejecuta el proyecto
  // comando scripts que podemos ejecutar por consola
  "scripts": {
    "serve": "nodemon app.js",
    "prod": "node app"
  },
  "author": "kodoti", // autor del proyecto
  "license": "ISC", // licencia
  // dependencias obligatorias que requiere el proyecto
  "dependencies": {
    "cors": "^2.8.5",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "mongoose": "^5.9.10",
    "uuid": "^7.0.3"
  },
  // dependencias que solo serán útiles para en un entorno de desarrollo
  "devDependencies": {
      "jasmine": "3.5.0"
  }
}

¿Tengo que aprenderme de memoria estos parámetros?

Claro que no, podemos crear este archivo facilmente a través del siguiente comando.

npm init

Y el asistente nos guiará en el proceso de como queremos crear nuestro package.json.

Ventaja de esto

Supongamos que trabajamos en un equipo y alguno de nuestros desarrolladores necesita una librería como momentjs para trabajar con las fechas.

Algo érroneo pero una salida práctica sería subir todos los cambios incluida la librería a nuestro repositorio pero esto haría que nuestro repo ocupe más espacio de lo normal de manera innecesaria porque con nuestro package.json se soluciona.

¿Cómo?

Si volvemos analizar el package.json veremos una propiedad llamada dependencies, mencioné que dichas dependecias son las necesarias para que el proyecto trabaje y a la vez permite la descarga de estas a través de un simple comando.

Veamos el package.json de nuevo.

"dependencies": {
    "cors": "^2.8.5",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "mongoose": "^5.9.10",
    "uuid": "^7.0.3"
}

El comando para instalar las dependencias.

npm install

Omitamos los warning que inidican que no especifique la descripción del package.json y tampoco lo asocié a un repositorio.

Scripts

La propiedad scripts es algo bastante interesante porque nos va a permitir preconfigurar comandos que podrían ser para inicializar nuestro proyecto, ejecutar pruebas, entre otros.

Analicemos los scripts que tenemos en nuestro package.json:

"scripts": {
    "serve": "nodemon app.js",
    "prod": "node app"
}
  • serve: indica que quiere levantar el proyecto pero haciendo uso de <> el cual es una dependencia que ante cualquier cambio del proyecto vuelte a compilar todo para evitar la tediosa tarea de hacerlo manaulmente.
  • prod: sin hacer uso ejecutamos nuestro proyecto directamente que sería lo más idóneo para ponerlo en producción.

¿Cómo ejecuto los scripts?

npm run serve
npm run prod

En las siguientes entradas ya veremos como levantar un servidor web a través de NodeJs.