Saltar al contenido
Curso de Node.js y APIs
Todos los cursos Ir al ejercicio →

npm y package.json

  • ⏱ 45 minutos
  • 📶 Nivel: principiante
  • 🧩 Incluye ejercicio

💡 🎯 Al terminar esta lección podrás…

  • Leer y entender un package.json.
  • Instalar y desinstalar paquetes y distinguir dependencies de devDependencies.
  • Interpretar versiones como ^5.1.0 y ~5.1.0.
  • Crear scripts y ejecutarlos con npm run.
  • Saber qué se sube a Git y qué no (node_modules, .env).

1.Qué es npm y qué es un paquete

Casi nadie programa todo desde cero. Para casi cualquier necesidad (un servidor web, validar datos, manejar fechas) alguien ya escribió y publicó una biblioteca. Esas bibliotecas se llaman paquetes y viven en un registro público. npm (Node Package Manager) es la herramienta que viene con Node y que sirve para:

  1. Descargar paquetes en tu proyecto (npm install).
  2. Anotar qué paquetes usa tu proyecto, y en qué versión, en package.json.
  3. Ejecutar comandos del proyecto con atajos (npm run).

Ya usaste npm en React cuando escribiste npm install y npm run dev: lo que aprendes aquí es lo que hay detrás de esos comandos.

2.package.json por dentro

El package.json es la ficha del proyecto. Es un archivo JSON (comillas dobles, sin comas finales, sin comentarios) con esta pinta:

package.json
{
  "name": "mi-api",
  "version": "1.0.0",
  "description": "Mi primera API con Node",
  "type": "module",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "node --watch index.js"
  },
  "dependencies": {
    "express": "^5.1.0"
  },
  "devDependencies": {
    "prettier": "^3.3.0"
  },
  "engines": {
    "node": ">=20"
  }
}
CampoPara qué sirve
nameNombre del proyecto: en minúsculas, sin espacios
versionVersión del proyecto (MAYOR.MENOR.PARCHE)
type"module" para ES Modules; sin él, CommonJS
mainArchivo de entrada del proyecto
scriptsAtajos de comandos que se lanzan con npm run
dependenciesPaquetes que el programa necesita para funcionar
devDependenciesPaquetes que solo usas mientras desarrollas (formateadores, pruebas)
enginesVersiones de Node con las que funciona el proyecto

📌 Nota · Las versiones del ejemplo

Los números de versión de express y prettier de arriba son ilustrativos. Al instalar un paquete, npm escribe la versión actual en tu package.json; no tienes que escribirla tú.

⚠️ Importante · JSON es estricto

En package.json una coma de más, una comilla simple o un comentario rompen el archivo y npm mostrará EJSONPARSE. Revisa las comas cuando lo edites a mano.

3.Instalar y quitar paquetes

Dentro de la carpeta del proyecto (donde está el package.json) instalas un paquete con:

Terminal
npm install express
Salida esperada
added 65 packages, and audited 66 packages in 2s

found 0 vulnerabilities

Tu número de paquetes será distinto: un paquete suele depender de otros, y npm los descarga todos. Después del comando ocurren tres cosas:

ComandoQué hace
npm install (o npm i)Instala todo lo que figura en package.json (lo que haces tras clonar un proyecto)
npm install paqueteInstala un paquete y lo añade a dependencies
npm install -D paqueteLo añade a devDependencies (solo desarrollo)
npm uninstall paqueteLo quita del proyecto y de package.json
npm ciInstala exactamente lo que dice package-lock.json (útil en despliegues)
npm outdatedMuestra qué paquetes tienen versiones nuevas
npm auditRevisa si tus dependencias tienen vulnerabilidades conocidas

Una vez instalado, lo usas desde tu código con un import:

index.js
import express from "express";

console.log(typeof express);
Salida esperada
function

💡 Consejo · Elegir bien un paquete

Antes de instalar algo, mira que esté mantenido (publicaciones recientes), que tenga un uso razonable y documentación clara. Cada dependencia es código ajeno que corre en tu programa: menos es más.

4.Versiones: MAYOR.MENOR.PARCHE

Los paquetes usan versionado semántico: tres números separados por puntos, por ejemplo 5.1.2.

NúmeroCambia cuando…Ejemplo
MAYOR (5.x.x)Hay cambios que rompen la compatibilidad4.21.2 → 5.0.0
MENOR (x.1.x)Se añaden funciones sin romper nada5.0.0 → 5.1.0
PARCHE (x.x.2)Se corrigen errores5.1.0 → 5.1.1

En package.json las versiones llevan un símbolo delante que indica qué actualizaciones acepta npm:

EscritoAceptaEjemplos que cumplen 5.1.0 como base
"^5.1.0"Cualquier versión compatible: mismo MAYOR, igual o superior5.1.0, 5.1.4, 5.9.0 (no 6.0.0)
"~5.1.0"Solo parches: mismo MAYOR y MENOR5.1.0, 5.1.9 (no 5.2.0)
"5.1.0"Exactamente esa versión5.1.0

El símbolo ^ es el que npm escribe por defecto. Para ver la idea en acción, aquí tienes una versión simplificada de la comparación, en JavaScript puro:

▶ Comparar versiones
Consola

📌 Nota · El archivo package-lock.json

Mientras que package.json dice «acepto versiones ^5.1.0», package-lock.json dice «hoy instalé exactamente la 5.1.2». Así todas las personas del equipo (y el servidor) obtienen las mismas versiones. Se sube a Git y no se edita a mano.

5.Scripts: atajos para tus comandos

Dentro de scripts defines nombres de comandos y lo que ejecutan. Así, quien llegue a tu proyecto no necesita saber cómo se arranca: solo escribe npm run más el nombre.

package.json (fragmento)
"scripts": {
  "start": "node index.js",
  "dev": "node --watch index.js",
  "formatear": "prettier --write ."
}
Terminal
npm run dev
Salida esperada
> mi-api@1.0.0 dev
> node --watch index.js

Servidor escuchando…

Dos nombres tienen atajo y se pueden ejecutar sin run: npm start y npm test. Para cualquier otro nombre debes escribir npm run nombre. Y si escribes solo npm run, verás la lista de scripts disponibles.

💡 Consejo · Convención habitual

start arranca el programa «de verdad» (producción) y dev arranca el modo desarrollo con recarga automática. Es la misma pareja que viste en los proyectos de Vite.

Los programas instalados como dependencia (por ejemplo prettier) están disponibles dentro de los scripts sin escribir su ruta. Fuera de un script, se ejecutan con npx:

Terminal
npx prettier --check .

npx ejecuta el programa de un paquete: si está en tu proyecto usa esa copia; si no, lo descarga temporalmente para esa ejecución.

6.node_modules y .gitignore

La carpeta node_modules/ puede contener miles de archivos y pesar cientos de megabytes. Pero es totalmente reproducible: con package.json y package-lock.json, npm install la vuelve a crear. Por eso nunca se sube a Git. Se excluye con un archivo .gitignore en la raíz del proyecto:

.gitignore
node_modules/
.env
*.log

Cada línea es un patrón de archivos que Git debe ignorar:

⚠️ Importante · Qué se sube y qué no

Sí se suben: tu código, package.json, package-lock.json y .gitignore. No se suben: node_modules/ y cualquier archivo con secretos. Quien clone tu repositorio solo escribe npm install y recupera todo.

Si un día algo se comporta de forma extraña tras actualizar paquetes, el remedio clásico es borrar node_modules y ejecutar npm install otra vez.

7.Leer un package.json con JavaScript

Como package.json es JSON, puedes leerlo con JSON.parse (lección 2) y trabajar con él como con cualquier objeto. Este editor lo hace en tu navegador con un texto de ejemplo:

▶ Analizar un package.json
Consola

8.Errores frecuentes

📒 Apuntes para llevar

  • npm instala paquetes y ejecuta comandos del proyecto; viene con Node.
  • package.json es la ficha del proyecto: nombre, versión, scripts y dependencias.
  • npm install paquete → dependencies; npm install -D paquete → devDependencies.
  • Versiones MAYOR.MENOR.PARCHE: ^ acepta menores y parches; ~, solo parches.
  • package-lock.json fija las versiones exactas y sí se sube a Git.
  • node_modules/ no se sube: se reconstruye con npm install.
  • npm run nombre ejecuta un script; npm start y npm test no necesitan run.
  • npx programa ejecuta el programa de un paquete.

9.Glosario

TérminoSignificado
npmGestor de paquetes de Node: instala dependencias y ejecuta scripts.
PaqueteBiblioteca de código publicada en el registro de npm.
DependenciaPaquete del que depende tu proyecto.
devDependenciesDependencias solo necesarias durante el desarrollo.
Versionado semánticoSistema MAYOR.MENOR.PARCHE que indica el tipo de cambio de cada versión.
package-lock.jsonRegistro de las versiones exactas instaladas.
ScriptAtajo definido en package.json y lanzado con npm run.
.gitignoreArchivo que lista lo que Git no debe rastrear.
npxHerramienta que ejecuta el programa de un paquete.

🧠 Comprueba lo aprendido

Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.

¿Para qué sirve el campo scripts de package.json?

¿Qué significa "^5.1.0"?

¿Qué carpeta NO se sube a Git?

¿Cómo ejecutas el script dev?

¿Dónde instalas con -D una herramienta que solo usas al desarrollar?

Tu progreso se guarda en este navegador y se refleja en el índice del curso.

💡 🚀 ¡Ahora te toca!

La práctica fija lo aprendido. Pasa al ejercicio de esta lección.

Ir al ejercicio