Pregunta 1Cuando escribes npm install react en la carpeta my-app, ¿dónde va el paquete descargado?
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.
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.
A la izquierda, todas las líneas que escribiste son tuyas; a la derecha, solo llamas en una línea a lo que descargaste.
- La cadena que indicas al descargarlo
- Identifica una sola cosa dentro del registro
- Con cada revisión se añade un número nuevo
- Los números antiguos siguen disponibles
- El programa en sí, que se ejecuta al llamarlo
- No los modificas tú
- Aquí se enumera lo que react necesita para funcionar
- Vienen juntos cuando lo descargas
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).
- app.js — el código fuente del procesamiento de las reservas
- package.json — el archivo que enumera los nombres que se descargan
- El código fuente del paquete descargado
- Esto es lo que llamas
- Se crea una carpeta por cada nombre
- Si no necesita nada, esto no crece
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 escribiste | Qué hace npm | Resultado dentro de my-app |
|---|---|---|
| npm install react | Descarga ese nombre y sus dependencias | Aparecen carpetas en node_modules |
| npm install | Descarga de una vez los nombres de package.json | Se crea node_modules entero |
| npm install reactttt | Lo busca y no lo encuentra | 404 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.
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.
- El nombre de la propia aplicación
- Pone my-app
- Enumera los nombres de los paquetes necesarios para funcionar
- npm install lee esta parte
- Descargar react añade una línea
- Donde pones nombres cortos a los comandos que escribes a menudo
- Se llama así: npm run start
Lo que lee npm install es la parte dependencies del centro.
Una misma cosa recibe tres nombres según desde dónde la mires.
Gracias al archivo de lista, no tienes que entregarle node_modules a nadie.
| Lo que entregaste a otra computadora | Cuando esa persona escribe npm install | ¿Funciona my-app? |
|---|---|---|
| app.js y package.json | Descarga todos los nombres de la lista | Está el mismo conjunto y funciona |
| solo app.js | No hay forma de saber qué nombres descargar | La llamada da un error |
| app.js y node_modules | El contenido está ahí sin escribirlo | Funciona, 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.
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).
- node_modules — aquí dentro van las dependencias
- No se ve desde otra aplicación
- Tiene su propio node_modules
- Versiones distintas del mismo nombre no chocan
- site-packages hay uno solo en toda la computadora
- Si otra aplicación pide una versión distinta, chocan
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.
Verificación de conocimientos
Responde cada pregunta una a una.
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?