Qué es la gestión de paquetes — qué instala npm install y dónde

Este artículo forma parte del curso Fundamentos de informática, que construye desde cero los conocimientos prácticos de informática que necesitas como mínimo para programar y hacer vibe coding.
Al escribir npm install react, en my-app aparece node_modules y se añade una línea a package.json. Los diagramas siguen lo que pone en marcha esa única línea.

Este artículo trata la gestión de paquetes.

Es el mecanismo que descarga una biblioteca externa por su nombre con una sola línea, como npm install, y la coloca en un lugar fijo.

Qué se coloca y dónde con la línea npm install react
Escribesnpm install reactnpm lo descargadel registroNueva carpetaen node_modulesSe añade una líneaa package.jsonapp.js nocambia
La línea de la izquierda pasa al npm del centro, y el resultado queda en los dos lugares de la derecha. El app.js que escribiste tú no cambia.

Solo escribes la línea de la izquierda, y lo que se añade son las dos cosas de la derecha.

Lo único que crece es la carpeta node_modules y una línea de package.json; el app.js que escribiste tú no cambia ni un carácter.

Qué es un paquete — una biblioteca externa que descargas por su nombre

Lo que se reúne en una forma descargable es un paquete (package. Una biblioteca externa reunida en una forma que se puede descargar indicando su nombre), y el número que indica su contenido en ese momento es la versión (version).

Cuando quieres mostrar las fechas de forma legible en la app de reservas my-app, ese mismo código puedes escribirlo tú, pero también se distribuye como paquete.

Mostrar fechas: escribirlo tú frente a descargarlo
Quieres mostrarfechas legiblesEscribirlo túUsar un paqueteDecenas de líneasy corregir erroresDescargar pornombre, 1 líneaEl mismo resultadoen la pantalla
De arriba abajo el flujo se divide en dos y al final vuelve a juntarse. Lo que cambia es cuánto escribes; la pantalla que sale es la misma.

A la izquierda, todas las líneas que escribiste son tuyas; a la derecha, solo llamas en una línea a lo que descargaste.

Qué contiene un único paquete llamado react
El paquete react
Nombre
  • La cadena que indicas al descargarlo
  • Identifica una sola cosa dentro del registro
Versión
  • Con cada revisión se añade un número nuevo
  • Los números antiguos siguen disponibles
Archivos de código fuente
  • El programa en sí, que se ejecuta al llamarlo
  • No los modificas tú
Nombres de otros paquetes que necesita
  • Aquí se enumera lo que react necesita para funcionar
  • Vienen juntos cuando lo descargas
La caja exterior es un paquete, react. Al descargarlo indicas el nombre y la versión, y los archivos de dentro vienen todos juntos.

Al descargarlo solo indicas el nombre de arriba.

Los «nombres de otros paquetes que necesita» de abajo son los que después aumentan el número de carpetas.

Un paquete es una biblioteca externa que puedes descargar por su nombre

Un paquete es un programa que escribió otra persona, con un nombre y en una forma que se puede distribuir.

Si indicas el nombre, traes su contenido a tu computadora, y la versión es el número que distingue las revisiones dentro de un mismo nombre.

Qué aparece dentro de my-app cuando escribes npm install react

Lo que descarga por nombre es el gestor de paquetes (package manager. Un programa que descarga paquetes y los coloca en un lugar fijo), y el de JavaScript es npm.

En los dos casos es una sola línea en la terminal, y ambas suponen que la escribes dentro de my-app.

# Primero muévete a la carpeta my-app
cd my-app

# Descargar un paquete con el nombre react
npm install react

# Descargar de una vez los nombres que hay en el archivo de lista
npm install

Los paquetes descargados van a node_modules (la carpeta que npm crea dentro de my-app para guardar los paquetes descargados).

Dentro de my-app: lo que escribes tú y lo que crea npm
my-app (la carpeta de la app de reservas)
Archivos que escribes tú
  • app.js — el código fuente del procesamiento de las reservas
  • package.json — el archivo que enumera los nombres que se descargan
node_modules (la crea npm)
react
  • El código fuente del paquete descargado
  • Esto es lo que llamas
Paquetes que necesita el descargado
  • Se crea una carpeta por cada nombre
  • Si no necesita nada, esto no crece
La caja exterior es la carpeta my-app. El marco de arriba tiene los archivos que escribes tú; el de abajo es la carpeta que npm crea y que npm modifica.

Los archivos que escribes tú y la carpeta que crea npm están separados dentro del mismo my-app.

Aunque sea la misma línea, el resultado cambia según cómo la escribas y según si el nombre está mal escrito.

La línea que escribisteQué hace npmResultado dentro de my-app
npm install reactDescarga ese nombre y sus dependenciasAparecen carpetas en node_modules
npm installDescarga de una vez los nombres de package.jsonSe crea node_modules entero
npm install reacttttLo busca y no lo encuentra404 Not Found; no se añade nada

Como en la tercera fila, si un nombre mal escrito no existe en el registro, no se instala nada.

Si un nombre mal escrito existe por casualidad, se instala otra cosa, así que copia los nombres de la página oficial.

Por qué descargar un solo paquete añade muchas carpetas
npm install expressexpressPaquetes quenecesita expressPaquetes quenecesitan esosPaquetes todavíamás abajonode_modules condecenas de carpetas
Se despliega de arriba abajo y al final se junta en uno. Lo que necesita el paquete descargado, y lo que a su vez necesita cada uno de esos, viene junto con él. En un paquete que no necesita nada, como react, queda una sola carpeta.

Vienen juntos los paquetes que necesita react y también los que necesitan esos.

No tener que averiguar tú ese conjunto ni descargarlo uno a uno es la razón para usar un gestor de paquetes.

Aunque descargues uno solo, en node_modules no siempre aparece una sola carpeta.

El registro es otra computadora al otro lado de Internet.

El único sitio donde se colocan los paquetes descargados es node_modules, dentro de la carpeta my-app.

El app.js que escribiste llama a los paquetes que hay ahí y los usa.

Lo que descargas va a node_modules

Lo que descargas va a la carpeta node_modules que se crea dentro de my-app.

El app.js que escribiste tú no cambia, y aparecen más carpetas de las que indicaste porque también viene lo que necesita el paquete descargado.

package.json — el archivo de lista con los nombres de los paquetes descargados

El contenido de node_modules lo crea npm y no lo modificas tú.

Lo único que gestionas tú es un solo archivo con la lista de los nombres descargados.

Ese es el archivo de lista (en JavaScript, package.json. El archivo donde se anotan los nombres de los paquetes que esa aplicación necesita para funcionar), y cada uno de los nombres que aparecen ahí es una dependencia (dependency. Un paquete que tu código necesita para funcionar).

{
  "name": "my-app",
  "dependencies": {
    "react": "^19.0.0",
    "express": "^5.1.0"
  }
}

Las dos entradas que aparecen dentro de dependencies son las dependencias de este my-app.

La parte derecha indica la versión que se descarga; los números son para este ejemplo y, en la práctica, entra la que estaba vigente al descargarla.

El ^ del principio marca que «también se permiten versiones nuevas compatibles con el número escrito».

Además de las dependencias, en package.json hay otras cosas anotadas.

Qué aparece dentro de package.json
package.json
name
  • El nombre de la propia aplicación
  • Pone my-app
dependencies
  • Enumera los nombres de los paquetes necesarios para funcionar
  • npm install lee esta parte
  • Descargar react añade una línea
scripts
  • Donde pones nombres cortos a los comandos que escribes a menudo
  • Se llama así: npm run start
La caja exterior es un único archivo, package.json. Lo que lee npm install es la parte dependencies del centro.

Lo que lee npm install es la parte dependencies del centro.

Una misma cosa recibe tres nombres según desde dónde la mires.

La misma cosa cambia de nombre según dónde la mires
==En el registroPaqueteGuardado connombre y versiónEn package.jsonDependenciaNombre que my-appnecesitaEn app.jsBiblioteca externaPrograma quellamas y usas
A la izquierda, desde dónde miras; en el centro, el nombre que se usa ahí; a la derecha, cómo se trata en ese sitio. Los tres unidos por la línea doble son lo mismo.

Gracias al archivo de lista, no tienes que entregarle node_modules a nadie.

Lo que entregaste a otra computadoraCuando esa persona escribe npm install¿Funciona my-app?
app.js y package.jsonDescarga todos los nombres de la listaEstá el mismo conjunto y funciona
solo app.jsNo hay forma de saber qué nombres descargarLa llamada da un error
app.js y node_modulesEl contenido está ahí sin escribirloFunciona, pero entregas cientos de carpetas

Entregas app.js y package.json, y la otra persona escribe npm install una vez.

npm solo lee dependencies de package.json, descarga del registro los nombres que aparecen ahí y vuelve a crear node_modules.

No hace falta entregar node_modules tal cual.

Con la lista de nombres basta para volver a crear el contenido

package.json es el archivo que enumera los nombres de los paquetes que este my-app necesita para funcionar.

npm install lee este archivo y descarga todos los nombres de una vez, así que node_modules se puede volver a crear en cualquier momento y no hay que entregárselo a nadie.

En Python es igual — pip y requirements.txt, y el entorno virtual que separa dónde van los paquetes

Hasta aquí lo hemos visto con los nombres de JavaScript.

En Python cambian los nombres, pero lo que se hace es lo mismo.

Qué cumple la misma función en JavaScript y en Python
===JavaScriptnpmpackage.jsonnode_modulesPythonpiprequirements.txtsite-packagesFunciónDescargar dandoel nombreLista de nombrespara descargarDónde se guardanlos paquetes
La fila de arriba es JavaScript, la del medio son los nombres de Python y la de abajo es la función. Los dos unidos por la línea doble solo se diferencian en el nombre; la función es la misma.

pip es lo que descarga y requirements.txt es el archivo de lista con los nombres.

Como la función es la misma, aprender uno te permite leer el otro igual.

Lo único que cambia es dónde van: si no creas un entorno virtual, pip los instala en toda la computadora.

Para evitarlo se crea un entorno virtual (virtual environment. Un mecanismo que crea, en forma de carpeta, un lugar donde van los paquetes de esa aplicación sola).

Dónde van los paquetes, separado por aplicación
Tu computadora
my-app (la app de reservas)
  • node_modules — aquí dentro van las dependencias
  • No se ve desde otra aplicación
other-app (otra aplicación)
  • Tiene su propio node_modules
  • Versiones distintas del mismo nombre no chocan
Una aplicación de Python sin entorno virtual
  • site-packages hay uno solo en toda la computadora
  • Si otra aplicación pide una versión distinta, chocan
La caja exterior es tu computadora. Los dos de arriba guardan sus paquetes dentro de su propia carpeta; solo el de abajo comparte un único lugar en toda la computadora.

Si las carpetas están separadas por aplicación, versiones distintas del mismo nombre pueden convivir sin chocar.

Las instrucciones de instalación te hacen crear primero un entorno virtual para establecer esa separación.

Aunque cambie el lenguaje, las tres funciones son las mismas

Todos los lenguajes tienen un programa que descarga, un archivo de lista con los nombres y un lugar donde va lo que llega.

En JavaScript son npm, package.json y node_modules; en Python son pip y requirements.txt, y solo en Python los paquetes van a toda la computadora si no creas un entorno virtual.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1Cuando escribes npm install react en la carpeta my-app, ¿dónde va el paquete descargado?

Pregunta 2Al ejecutar el mismo my-app en otra computadora, ¿por qué no hace falta entregar node_modules?

Pregunta 3¿Por qué al descargar un solo paquete pueden aparecer más carpetas en node_modules?