Mira la lección en vídeo
Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.
Desbloquear Plan PlusQué es npm y para qué sirve
npm (Node Package Manager) es el gestor de paquetes oficial de Node.js y constituye uno de los ecosistemas de software más grandes del mundo. Se instala automáticamente junto con Node.js y actúa como una herramienta fundamental para gestionar las dependencias y bibliotecas que necesitan nuestros proyectos.
En esencia, npm funciona como un repositorio centralizado donde los desarrolladores publican paquetes de código reutilizable. Estos paquetes pueden ser desde pequeñas utilidades hasta frameworks completos, y están disponibles para que cualquier desarrollador los descargue e integre en sus proyectos.
Funciones principales de npm
npm desempeña varias funciones esenciales en el desarrollo con Node.js:
- Instalación de paquetes: Permite descargar e instalar bibliotecas de terceros con un simple comando
- Gestión de dependencias: Mantiene un registro de todas las bibliotecas que utiliza tu proyecto
- Control de versiones: Gestiona qué versiones específicas de cada paquete necesita tu aplicación
- Publicación de paquetes: Facilita compartir tu propio código con la comunidad
- Ejecución de scripts: Permite definir y ejecutar comandos personalizados para tu proyecto
El archivo package.json
El corazón de cualquier proyecto Node.js es el archivo package.json, que npm utiliza para gestionar la información del proyecto. Este archivo contiene metadatos sobre tu aplicación, incluyendo nombre, versión, descripción y, lo más importante, la lista de dependencias.
{
"name": "mi-proyecto",
"version": "1.0.0",
"description": "Un proyecto de ejemplo",
"main": "index.js",
"dependencies": {
"lodash": "^4.17.21",
"axios": "^1.6.0"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}
Tipos de dependencias
npm distingue entre diferentes tipos de dependencias según su propósito:
- Dependencies: Paquetes necesarios para que la aplicación funcione en producción
- DevDependencies: Herramientas de desarrollo que solo se necesitan durante el proceso de construcción
- PeerDependencies: Dependencias que deben ser instaladas por el proyecto que consume tu paquete
- OptionalDependencies: Paquetes que mejoran la funcionalidad pero no son críticos
Comandos básicos de npm
Los comandos más utilizados en npm incluyen:
npm init
: Crea un nuevo archivo package.json de forma interactivanpm install
: Instala todas las dependencias listadas en package.jsonnpm install <paquete>
: Instala un paquete específiconpm uninstall <paquete>
: Elimina un paquete del proyectonpm update
: Actualiza los paquetes a sus versiones más recientes compatiblesnpm run <script>
: Ejecuta un script definido en package.json
El directorio node_modules
Cuando instalas paquetes, npm los almacena en una carpeta llamada node_modules. Esta carpeta contiene todo el código de las bibliotecas que tu proyecto necesita, organizadas de manera que Node.js pueda encontrarlas automáticamente cuando uses require()
o import
.
mi-proyecto/
├── node_modules/
│ ├── lodash/
│ ├── axios/
│ └── ...
├── package.json
├── package-lock.json
└── index.js
Versionado semántico
npm utiliza el versionado semántico (SemVer) para gestionar las versiones de los paquetes. Este sistema utiliza tres números separados por puntos (MAJOR.MINOR.PATCH):
- MAJOR: Cambios incompatibles con versiones anteriores
- MINOR: Nueva funcionalidad compatible con versiones anteriores
- PATCH: Correcciones de errores compatibles
Los símbolos ^
y ~
en package.json indican qué actualizaciones automáticas acepta tu proyecto. El símbolo ^
permite actualizaciones menores y parches, mientras que ~
solo permite parches.
Registro público y privado
El registro público de npm aloja millones de paquetes gratuitos disponibles para toda la comunidad. Sin embargo, npm también permite configurar registros privados para empresas que necesitan mantener paquetes internos seguros.
La línea de comandos de npm se conecta por defecto al registro público, pero puede configurarse para usar registros alternativos según las necesidades del proyecto o la organización.
Diferencia entre npm y yarn y bun
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
Aunque npm es el gestor de paquetes oficial de Node.js, la comunidad ha desarrollado alternativas que buscan mejorar aspectos específicos como la velocidad, la seguridad o la experiencia de desarrollo. Las dos alternativas más destacadas son Yarn y Bun, cada una con características distintivas que las hacen atractivas para diferentes escenarios.
Yarn: El competidor establecido
Yarn fue desarrollado por Facebook (ahora Meta) en 2016 como respuesta a las limitaciones que npm tenía en ese momento. Aunque npm ha evolucionado significativamente, Yarn mantiene ventajas específicas que lo hacen relevante.
Características principales de Yarn:
- Instalación determinista: Genera un archivo
yarn.lock
que garantiza que todos los desarrolladores del equipo instalen exactamente las mismas versiones - Instalación en paralelo: Descarga múltiples paquetes simultáneamente, reduciendo el tiempo total de instalación
- Caché offline: Almacena paquetes localmente para permitir instalaciones sin conexión a internet
- Workspaces nativos: Facilita la gestión de proyectos monorepo con múltiples paquetes relacionados
Instalación de Yarn:
npm install -g yarn
Comandos equivalentes entre npm y Yarn:
- Inicializar proyecto:
npm init
→yarn init
- Instalar dependencias:
npm install
→yarn install
o simplementeyarn
- Añadir paquete:
npm install lodash
→yarn add lodash
- Eliminar paquete:
npm uninstall lodash
→yarn remove lodash
- Ejecutar script:
npm run dev
→yarn dev
Bun: La nueva generación
Bun representa un enfoque revolucionario al ser mucho más que un simple gestor de paquetes. Es un runtime completo de JavaScript que incluye bundler, transpilador y gestor de paquetes, todo optimizado para máximo rendimiento.
Características distintivas de Bun:
- Velocidad extrema: Escrito en Zig, es significativamente más rápido que npm y Yarn en operaciones de instalación
- Runtime alternativo: Puede ejecutar código JavaScript/TypeScript sin necesidad de Node.js
- Bundler integrado: Incluye herramientas de empaquetado sin dependencias adicionales
- Compatibilidad con Node.js: Mantiene compatibilidad con la mayoría de APIs de Node.js
- Soporte nativo de TypeScript: Ejecuta archivos TypeScript directamente sin transpilación previa
Instalación de Bun:
curl -fsSL https://bun.sh/install | bash
Comandos básicos de Bun:
# Inicializar proyecto
bun init
# Instalar dependencias
bun install
# Añadir paquete
bun add lodash
# Ejecutar archivo
bun run index.js
# Ejecutar script del package.json
bun run dev
Comparativa de rendimiento
La velocidad de instalación es uno de los factores más notables entre estos gestores:
- npm: Velocidad base, ha mejorado considerablemente en versiones recientes
- Yarn: Aproximadamente 2-3x más rápido que npm en la mayoría de escenarios
- Bun: Puede ser hasta 10-20x más rápido que npm en instalaciones grandes
Compatibilidad y ecosistema
Compatibilidad con package.json:
Todos los gestores utilizan el mismo formato de package.json
, lo que facilita la migración entre herramientas. Sin embargo, cada uno genera su propio archivo de bloqueo:
- npm:
package-lock.json
- Yarn:
yarn.lock
- Bun:
bun.lockb
(formato binario)
Soporte del ecosistema:
- npm: Soporte universal, funciona con todos los paquetes del registro
- Yarn: Excelente compatibilidad, ampliamente adoptado en la industria
- Bun: Buena compatibilidad con la mayoría de paquetes, aunque algunos paquetes específicos de Node.js pueden presentar problemas
Cuándo usar cada gestor
Elige npm cuando:
- Trabajas en un equipo que prefiere herramientas oficiales
- Necesitas máxima compatibilidad con documentación y tutoriales
- El proyecto no requiere optimizaciones específicas de rendimiento
Elige Yarn cuando:
- Trabajas en equipos grandes donde la consistencia de dependencias es crítica
- Gestionas proyectos monorepo complejos
- Necesitas instalaciones offline frecuentes
Elige Bun cuando:
- La velocidad de desarrollo es prioritaria
- Trabajas con proyectos que se benefician de un runtime más rápido
- Quieres experimentar con tecnologías de vanguardia
- Desarrollas aplicaciones que requieren máximo rendimiento
Migración entre gestores
Migrar de npm a Yarn:
# Eliminar node_modules y package-lock.json
rm -rf node_modules package-lock.json
# Instalar con Yarn
yarn install
Migrar de npm a Bun:
# Eliminar node_modules y package-lock.json
rm -rf node_modules package-lock.json
# Instalar con Bun
bun install
La elección del gestor depende principalmente de las necesidades específicas del proyecto, el equipo de desarrollo y las prioridades en términos de rendimiento, estabilidad y compatibilidad. Todos son herramientas válidas que pueden coexistir en diferentes proyectos según el contexto.
Aprendizajes de esta lección de Node
- Comprender qué es npm y su papel en la gestión de dependencias en proyectos Node.js
- Identificar las funciones principales y comandos básicos de npm
- Diferenciar los tipos de dependencias y el uso del archivo package.json
- Conocer las características y ventajas de Yarn y Bun como alternativas a npm
- Saber cuándo y cómo migrar entre npm, Yarn y Bun según las necesidades del proyecto
Completa este curso de Node y certifícate
Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs