que-es-fichero-package-json-npm

Qué es el fichero Package.json de NPM

El fichero package.json es un componente esencial dentro del funcionamiento de NPM. Este archivo desempeña un papel fundamental ya que almacena 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

  • 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)

  • 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

Estructura básica de package.json

La estructura del fichero package.json es un 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:

AtributoDescripciónEjemplo
nameNombre del proyecto.“curso-npm”
versionVersión del proyecto.“1.0.0”
descriptionDescripción breve del proyecto.
mainArchivo principal del proyecto, es el punto de entrada cuando se importa el módulo.“index.js”
authorNombre del autor del proyecto.
licenseLicencia del proyecto.“MIT”
scriptsDefine comandos que se pueden ejecutar usando npm run script-name.
dependenciesLista de dependencias requeridas para que el proyecto funcione correctamente en producción.“express”, “lodash”
devDependenciesLista de dependencias requeridas solo para desarrollo.“nodemon”, “eslint”

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 automatización de procesos, compilación, ejecución de pruebas, limpieza de directorios (entre otros muchos ejemplos).

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 importante para permitir usar herramientas solo en la fase de desarrollo, pero evitando que se incluyan paquetes innecesarios en la distribución de la aplicación final (la de “verdad”).

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 que se genera automáticamente por NPM* en operaciones donde 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 😉