Información del sistema operativo e instalación de paquetes
En esta clase damos un paso importante en Node.js: acceder a información real del sistema operativo y aprender cómo instalar paquetes externos cuando la funcionalidad nativa no es suficiente.
Esto es clave para crear scripts robustos, herramientas de terminal y aplicaciones backend que necesiten conocer el entorno donde se ejecutan.
El módulo nativo node:os
Node.js incluye un módulo nativo llamado os que nos permite acceder a información detallada del sistema operativo. Para importarlo correctamente, seguimos la recomendación de usar el prefijo node::
import os from 'node:os'
Nota importante: El prefijo
node:no es estrictamente obligatorio en versiones recientes, pero es muy recomendable. Garantiza que estás importando un módulo nativo de Node.js y evita conflictos si en el futuro instalas una dependencia externa que se llame igual.
Qué información podemos obtener
Con el módulo os podemos acceder fácilmente a datos técnicos de la máquina:
- 💻 Sistema: Tipo de sistema operativo (
os.type()). - 🏗️ Arquitectura: Si es x64, arm64, etc. (
os.arch()). - 🧠 Memoria: Memoria total y libre en bytes (
os.totalmem(),os.freemem()). - 🏠 Home: El directorio principal del usuario actual (
os.homedir()). - ⏱️ Uptime: Cuánto tiempo lleva encendido el sistema en segundos (
os.uptime()). - 🚀 CPUs: Información de los núcleos y su velocidad (
os.cpus()).
Ejemplo práctico: script systeminfo.js
Vamos a crear un script sencillo que muestre un resumen de nuestro sistema:
import os from 'node:os'
console.log('Sistema:', os.type())
console.log('Plataforma:', os.platform())
console.log('Arquitectura:', os.arch())
console.log('Memoria total:', (os.totalmem() / 1024 / 1024 / 1024).toFixed(2), 'GB')
console.log('Memoria libre:', (os.freemem() / 1024 / 1024 / 1024).toFixed(2), 'GB')
console.log('Home:', os.homedir())
console.log('Uptime:', os.uptime(), 'segundos')
Al ejecutarlo con node systeminfo.js, verás los datos reales de tu máquina.
El problema de la legibilidad
Si observas el os.uptime(), verás que nos devuelve un número enorme de segundos. Por ejemplo: 117000. Esto es difícil de interpretar para un humano.
Podríamos hacer cálculos matemáticos para convertirlo a días, horas y minutos, pero… ¿para qué reinventar la rueda? Aquí es donde entra la potencia del ecosistema de Node.js.
Instalando paquetes externos
Cuando la funcionalidad nativa de Node.js no es suficiente o queremos ahorrar tiempo, podemos instalar paquetes desde el registro de npm.
Para este ejemplo, usaremos un paquete muy popular llamado ms (creado por Vercel), que convierte milisegundos en formatos de texto legibles.
Cómo instalar una dependencia
En este proyecto utilizamos pnpm, así que para instalarlo ejecutamos:
pnpm add ms
Este comando realiza tres acciones fundamentales:
- 📥 Descarga el código: Lo guarda en la carpeta
node_modules. - 📝 Actualiza el
package.json: Añademsa la lista dedependencies. - 🔒 Genera el lockfile: Crea o actualiza el archivo de bloqueo para asegurar que todos usemos la misma versión exacta.
Tip:
node_moduleses la carpeta donde vive el código de todas tus dependencias. Nunca debes editarla manualmente y, por lo general, siempre debe estar en tu.gitignore.
Usando el paquete ms
Una vez instalada, podemos importar la librería y usarla para mejorar nuestro script:
import os from 'node:os'
import ms from 'ms'
// Convertimos el uptime (segundos) a milisegundos
const uptimeInMs = os.uptime() * 1000
// Formato corto
console.log('Uptime corto:', ms(uptimeInMs)) // Ejemplo: "1d"
// Formato largo
console.log('Uptime largo:', ms(uptimeInMs, { long: true })) // Ejemplo: "1 day"
Por qué usar dependencias externas
Instalar dependencias nos permite:
- 🧼 Código más limpio: Delegamos tareas complejas a librerías especializadas.
- ⚡ Productividad: Aprovechamos soluciones que ya han sido probadas por miles de desarrolladores.
- 🛠️ Mantenibilidad: Es más fácil leer
ms(time)que un bloque de lógica matemática personalizada.
Resumen de la clase
En esta lección hemos sentado las bases para trabajar profesionalmente con Node.js:
- ✅ Módulos nativos: Usamos
node:ospara conocer el hardware y el sistema. - ✅ Prefijo
node:: Una buena práctica para evitar conflictos de nombres. - ✅ Gestión de paquetes: Aprendimos a instalar dependencias externas con
pnpm. - ✅ Ecosistema: Entendimos el papel de
node_modulesy la importancia de no “reinventar la rueda”.
¡Ya estamos listos para empezar a construir nuestro primer servidor web real!