Empezando mi ruta hacia Typescript: instalando Node.js

5 minuto(s) de lectura

Como con todas las tecnologías a las que uno llega por primera vez, lo más complejo de adentrarse en el mundo de Node.js es comprender todo lo que necesitas para empezar. Los que venimos del mundo PHP sabemos que la configuración más estandar para empezar es símplemente un servidor HTTP Apache con el módulo PHP debidamente configurado para poder arrancar nuestro primer “Hola Mundo” en minutos.

Los más avanzados explorarán ya Nginx con PHP-FPM pero, en esencia, viene a ser prácticamente lo mismo: un servidor web que se encarga de (simplificándolo mucho) la comunicación HTTP y entregar recursos necesarios al navegador web, y “algo” (un módulo del servidor o un demonio) que se encarga de ejecutar PHP y devolver la salida correspondiente a través del servidor.

Casi todas las distribuciones de Linux cuentan con los paquetes necesarios para empezar y hay muy buenos tutoriales sobre como hacer el setup. Incluso hay proyectos como XAMPP que facilitan mucho la vida para montar entornos de desarrollo mediante la distribución de un paquete que contiene servidor web, PHP, y base de datos.

En Node.js la cosa cambia un poco. Los que venimos de PHP podemos estar tentados a buscar un módulo para ejecutarlo “embebido” en algún servidor web (Nginx o Apache), pero no.

Para ejecutar Node.js tan sólo necesitamos ir a su página web, descargar la versión acorde a nuestro sistema operativo, instalarla y ya dispondremos de un nuevo comando node en nuestra línea de comandos (bueno realmente se nos instalan muchos más, pero en este momento no nos importa):

javiercaride@beast:$ node
Welcome to Node.js v14.15.4.
Type ".help" for more information.
> 

Hay que tener claro que Node.js es un entorno en tiempo de ejecución que permite la ejecución de código Javascript fuera del navegador y que está pensado (aunque no en exclusiva) para la capa del servidor. Se construyó sobre el motor V8 de Google y además de la ejecución del Javascript ofrece un API orientada a facilitar la construcción de aplicaciones en Javascript capaces de gestionar conexiones HTTP, Web Sockets, eventos asíncronos, etc.

Es por ello que Node.js no necesita de un servidor web para funcionar ya que él mismo puede gestionar las conexiones HTTP con el navegador cliente. De hecho el “hola mundo” más básico que podemos tener con node es el siguiente:

const http = require('http');

const hostname = '127.0.0.1';
const port = 8080;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hola mundo');
});

server.listen(port, hostname, () => {
  console.log(`Servidor ejecutándose en http://${hostname}:${port}/`);
});

En este código lo que estamos haciendo es levantar un servidor HTTP en el puerto 8080 y que cada vez que llegue una conexión a ese puerto se responda con el texto Hola mundo. Si guardamos este trozo de código en un fichero hola_mundo.js y ejecutamos:

$ node hola-mundo.js 
Servidor ejecutándose en http://127.0.0.1:8080/

Veremos que en la consola obtenemos el mensaje Servidor ejecutándose en http://127.0.0.1:8080/ y si vamos al navegador veremos que node está respondiendo como si fuese un Apache o un Nginx:

Navegador mostrando nuestro hola mundo en Node.js

¿Qué opción es la mejor para instalar Node.js?

Antes dije que para usar Node sólo tenemos que instalarlo y ya, pero ese sólo puede abrumarnos en un principio porque en la página de descargas de Node.js podemos ver que las opciones son numerosas:

  • Binarios: (tanto instaladores oficiales para Windows como compilados para macOS / Linux)
  • Contenedores docker
  • Gestores de paquetes
  • Código fuente para compilarlo uno mismo

Este gran número de opciones pueden confundirnos en un principio y más porque se nos ofrece 2 versiones diferentes de Node.js: la más reciente y la LTS

Pues aquí no hay una solución infalible, va a depender mucho del sistema operativo que utilices y del uso que vayas a hacer de Node.js.

Si sólo vas a cacharrear un poco para probar seguramente con bajar el binario correspondiente a tu sistema operativo sea suficiente. O, en el caso de las distribuciones de linux, sea mucho más fácil instalar el paquete que viene oficialmente en la distribución, aunque has de tener en cuenta que con este método normalmente no vas a tener la última versión.

En cuanto llevas cierto tiempo con Node, te acabas dando cuenta de que es una comunidad muy activa y que el entorno evoluciona muy rápidamente, con lo que hay versiones nuevas muy a menudo y éstas traen, a veces, cambios que no son compatibles hacia atrás o bien las librerías que usas no funcionan bien en la última versión disponible.

En esos momentos el tener instalado Node como binario disponible de forma global en el sistema operativo o mediante el paquete de tu distribución Linux hace que no sea cómodo cambiar de versión y puede dificultar el día a día, sobre todo si lo usas en proyectos profesionales.

Es aquí donde yo veo una gran ventaja utilizar un gestor de paquetes que te permita instalar distintas versiones de node de forma local a tu usuario y cambiar entre una u otra de forma muy fácil. Esto te permite probar versiones nuevas con poco riesgo y sin pasarte horas reconfigurando tu entorno de desarrollo.

De todos los que he probado el que más me ha gustado a mi es nvm. Y reitero que es la opción que más me ha gustado a mi y que mejor se adapta al uso que hago y al sistema operativo que utilizo (Ubuntu LTS). Mi recomendación es que probéis distintas opciones y adoptéis la que mejor se os adapte a vosotros.

El gestor nvm es un script de bash que se instala muy fácilmente ejecutando el script sh que su autor provee:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash

Tras la instalación dispondréis en vuestra línea de comandos del comando nvm que os permitirá instalar distintas versiones de Node.js (y sus herramientas) y, lo más potente, cambiar de una a otra de forma sencilla.

Por ejemplo si queremos instalar la última versión LTS sólo tendríamos que ejecutar:

nvm install --lts

Si además de la LTS queremos instalar una versión concreta porque tenemos un proyecto que la necesita sólo tendremos que indicarlo:

nvm install 15.8.0

y para usarla se lo decimos a nvm:

nvm use 15.8.0

Si ahora le preguntamos al sistema operativo whereis node veremos que obtendremos que apunta a la instalación local que nos ha dejado nvm y a la versión que le hemos pedido:

$ whereis node
node: /home/javiercaride/.nvm/versions/node/v15.8.0/bin/node

Las opciones de este gestor de paquetes node son amplias y están bien documentadas en su página de Github

Actualizado: