que-es-fichero-package-json-npm

Qué es el fichero Package.json de NPM

El fichero package.json es un componente esencial en el ecosistema de Node Package Manager (NPM) utilizado en el desarrollo de programas y aplicaciones con Node.js.

Este archivo desempeña un papel fundamental ya que en él almacenamos los datos del proyecto proyecto, sus dependencias, scripts personalizados y metadatos importantes.

Entre las funciones que tiene este fichero está:

  • Gestión de dependencias: El uso de package.json permite gestionar las dependencias del proyecto. Al enumerar todas las dependencias y sus versiones exactas, se garantiza que todos los colaboradores del proyecto estén utilizando las mismas versiones de paquetes.

  • Reproductibilidad: La combinación del fichero package.json junto con el fichero package-lock.json asegura que si puedes reproducir un proyecto, por ejemplo para duplicar, copiar a otra máquina, o hacer un proyecto basado en otro.

  • Colaboración y distribución: Para compartir un paquete con otros desarrolladores, simplemente proporcionar el fichero package.json y los comandos para instalar las dependencias será suficiente. Esto simplifica el proceso de publicación y asegura que todos los usuarios obtengan las mismas dependencias requeridas.

Estructura básica de package.json

La estructura del fichero package.json es el formato JSON (JavaScript Object Notation). Por lo que es muy fácil de entender por una persona, e incluso editarlo a mano sin demasiada dificultad.

El fichero package.json consta de varias claves y valores que definen las características y dependencias del proyecto. Veamos un ejemplo sencillo de un posible (inventado) archivo package.json:

{
  "name": "curso-npm",
  "version": "1.0.0",
  "description": "Curso de NPM - Aprende a utilizar Node Package Manager",
  "main": "index.js",
  "author": "LuisLlamas.es",
  "license": "MIT",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"No hay pruebas disponibles\""
  },
  "dependencies": {
    "express": "^4.17.1",
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "nodemon": "^2.0.12",
    "eslint": "^7.32.0"
  }
}

Explicación de las principales partes del archivo:

  • name: Nombre del proyecto. En este caso, “curso-npm”.
  • version: Versión del proyecto. En este ejemplo, “1.0.0”.
  • description: Descripción breve del proyecto.
  • main: Archivo principal del proyecto, es el punto de entrada cuando se importa el módulo. En este ejemplo, el archivo se llama “index.js”.
  • author: Nombre del autor del proyecto.
  • license: Licencia del proyecto. En este caso, se utiliza la licencia MIT, pero puedes elegir otra si lo deseas.
  • scripts: Define comandos que se pueden ejecutar usando npm run script-name.
  • dependencies: Lista de dependencias requeridas para que el proyecto funcione correctamente en producción. En este ejemplo, el proyecto depende de “express” y “lodash”, con las versiones mínimas especificadas.
  • devDependencies: Lista de dependencias requeridas solo para desarrollo. En este caso, tenemos “nodemon” y “eslint” que ayudarán durante el desarrollo, pero no son necesarias en producción.

Scripts

La clave scripts permite definir comandos de terminal que podemos asociar a un Alias personalizado, para que sea más cómodo de usar por nosotros o por nuestros colaboradores.

Estos Scripts se pueden ejecutar mediante el comando

npm run nombre_script

En el ejemplo anterior teníamos dos scripts con Alias start y test. En ese caso

  • start ejecutaría el archivo “index.js” con Node.js
  • test muestra un mensaje que indica que no hay pruebas disponibles.

Estos scripts pueden utilizarse para realizar tareas como la compilación, ejecución de pruebas, limpieza de directorios y mucho más. Brindan una forma sencilla de automatizar diversas operaciones y mejorar la eficiencia del flujo de trabajo.

Dependencies y DevDependencies

Las claves dependencies y devDependencies enumeran las dependencias del proyecto. La diferencia entre una y otra es que

  • dependencies son necesarias para que el programa funcione correctamente en producción
  • devDependencies son solo requeridas durante el desarrollo.

Separar estas dependencias es muy importante para permitir la distribución y compilación eficiente, evitando que se incluyan paquetes innecesarios en el producto final.

Por ejemplo, imagina que estás usando una librería que te ayuda durante el desarrollo remarcándote errores de sintaxis. No quieres que esa librería forma parte del producto final. En ese caso, la añadirías en devDependencies.

Package-lock

El fichero package-lock.json es un fichero usado por Node Package Manager (NPM) que se genera automáticamente en operaciones donde npm modifica el árbol de node_modules o el archivo package.json.

Su función principal es describir el árbol de dependencias exacto que se generó durante una instalación, permitiendo que futuras instalaciones generen árboles idénticos, independientemente de las actualizaciones intermedias de las dependencias.

No debemos tocar a mano el fichero Package-lock, es un fichero interno usado por NPM. Simplemente acostúmbrate a ignorarlo 😉.