Guía técnica de package.json y package-lock.json en proyectos Node.js

En el desarrollo frontend, npm es el gestor de paquetes más utilizado. Aunque se usa diariamente, es esencial comprender los archivos package.json y package-lock.json. Este artículo analiza en detalle su funcionamiento y configuración.

Instalación y gestión de paquetes con npm

npm permite la instalación local o global de paquetes. El comando básico es npm install o su abreviatura npm i.

Instalación local

Los paquetes instalados localmente solo están disponibles en el directorio actual. Ejemplo:

npm i vue-bootstrap

En proyectos reales, se genera primero el archivo package.json. Las dependencias se clasifican en:

  • dependencies: Paquetes para producción (ej. vue-bootstrap).
  • devDependencies: Paquetes para desarrollo (ej. webpack).

Para instalar en devDependencies, se usa --save-dev o -D; para dependencies, --save o -S. Sin parámetros, se instala en dependencies por defecto. En entornos de producción, se ejecuta npm install --prod para instalar solo dependencies.

Instalación global

Los paquetes globales están disponibles en todo el sistema. Se instalan con -g o --global:

npm i -g vue-bootstrap

La ubicación se verifica con npm root -g.

Eliminación de paquetes

Se reemplaza install por uninstall o un:

npm un vue-bootstrap

Para paquetes globales, se añade -g.

Proceso de instalación de npm

Al ejecutar npm install, npm sigue estos pasos:

  1. Configuración: Busca archivos .npmrc en el proyecto, globalmente o usa la configuración interna.
  2. Construcción del árbol de dependencias: Si existe package-lock.json, verifica consistencia con package.json; de lo contrario, genera el árbol basado en package.json.
  3. Descarga de dependencias: Verifica la caché local. Si no hay caché, descarga del registro, valida integridad y almacena en caché antes de descomprimir en node_modules.
  4. Generación de package-lock.json: Se crea automáticamente si no existe, o se actualiza si hay cambios. Su propósito es fijar versiones exactas.

Creación de package.json

El archivo package.json no se genera automáticamente. Se crea con npm init, que hace preguntas interactivas. Para generación rápida, se usa npm init -y o npm init -f. Los valores predeterminados se configuran con npm config set; por ejemplo:

npm config set init-author-name 'nuevoautor'

Campos clave en package.json

El archivo package.json es un objeto JSON con múltiples campos:

  • name y version: Identificador y versión del proyecto, siguiendo versionado semántico (por ejemplo, ^1.2.3 permite actualizaciones menores).
  • description, author, contributors: Metadatos del proyecto.
  • homepage, repository, bugs: Enlaces útiles.

Tipos de dependencias

npm admite varios tipos de dependencias en package.json:

  • dependencies: Dependencias de producción.
  • devDependencies: Dependencias de desarrollo.
  • peerDependencies: Dependencias compartidas para evitar duplicados (ej. vue en vuex).
  • bundledDependencies: Paquetes incluidos en el paquete final (requiere declaración previa en dependencies o devDependencies).
  • optionalDependencies: Dependencias que no interrumpen la instalación si fallan.

Otros campos relevantes

  • engines: Especifica versiones de Node.js o npm requeridas (solo informativo).
  • scripts: Comandos personalizados (ej. "start": "node server.js").
  • main, browser, module: Puntos de entrada para diferentes entornos.
  • files: Lista de archivos incluidos al publicar el paquete.
  • license: Protocolo de licencia open source (ej. MIT).

Análisis de package-lock.json

Este archivo fija versiones exactas de las dependencias. Cada entrada incluye:

  • version: Versión específica.
  • resolved: URL de origen.
  • integrity: Hash para verificación.
  • requires: Dependencias necesarias.
  • dependencies: Sub-dependencias anidadas en caso de conflictos.

Por ejemplo, si el proyecto depende de A, B y C, y B requiere una versión específica de C, package-lock.json reflejará esta estructura:

node_modules
  A.package
  B.package
    node_modules
      C.package
  C.package

Cuándo se modifica package-lock.json

Se genera automáticamente con npm install. Cambia cuando:

  • Se alteran dependencias en package.json.
  • Se instalan o eliminan paquetes.
  • Cambia la fuente de registro (registry).

Consultar versiones instaladas

Para ver versiones exactas, se usa:

npm list --depth 0

O revisando node_modules directamente.

Instalar versiones específicas

Se puede instalar una versión concreta, por ejemplo:

npm install vue-bootstrap@2.1.0

Esto actualiza tanto package.json como package-lock.json.

Actualizar paquetes

Se usa npm update para actualizar dentro de las restricciones semánticas. Para versiones mayores, se instala explícitamente con @version. El comando npm outdated muestra paquetes desactualizados.

Mejores prácticas con package-lock.json

Para aplicaciones, se recomienda comprometer package-lock.json al repositorio para garantizar consistencia. Para bibliotecas públicas, puede omitirse para permitir flexibilidad en proyectos dependientes. Al publicar, este archivo no se incluye.

En caso de conflictos, se puede eliminar package-lock.json y regenerarlo con npm install.

Configuración avanzada de npm

Los ajustes de npm se gestionan con npm config. Para mejorar la velocidad, se puede cambiar el mirror:

npm config set registry https://registry.npmmirror.com

Etiquetas: npm package.json package-lock.json Node.js dependency-management

Publicado el 6-28 05:54