10 preguntas y respuestas frecuentes al momento de aprender Node.js

Introducción

Con este breve post intentaré responder algunas de las preguntas más frecuentes que me hicieron y me hice cuando estaba aprendiendo las bases de Node.js.

1. ¿Qué es Node.js exactamente?

Node.js es un ENTORNO EN TIEMPO DE EJECUCIÓN MULTIPLATAFORMA PARA EJECUTAR CÓDIGO JAVASCRIPT FUERA DE UN NAVEGADOR.

Los diferentes navegadores web modernos poseen motores de ejecución que se encargan de INTERPRETAR código JavaScript para que un ordenador pueda comprenderlo, por ejemplo, Microsoft Edge usa uno llamado Chakra, Firefox construyó Spider Monkey y Google Chrome maneja V8

Por este motivo un mismo código ejecutado sobre diferentes navegadores suele obtener salidas diferentes.

En 2009 Ryan Dahl tuvo la brillante idea de poder crear una tecnología que permitiera poder usar JavaScript fuera de un navegador con la finalidad de poder crear programas de backend y servicios API, como también interactuar con el sistema operativo del ordenador, los puertos de red, administración de archivos, entre otros; acciones que hasta ahora no se podían realizar en un navegador web.

2. ¿Por que usar Node.js?

  • Es muy útil para prototipado de apps y desarrollo con metodologías ágiles actuales.
  • Fácilmente escalable.
  • Full JavaScript, puedes programar tanto el frontend como el backend con un solo lenguaje de programación.
  • Código más consistente y limpio.
  • Gran ecosistema y comunidad para desarrolladores.

3. ¿Node.js es un lenguaje de programación?

No. Node.js no es un lenguaje de programación, es una tecnología que permite ejecutar JavaScript fuera de un navegador. El lenguaje de programación que necesitas saber para aprender Node.js es JavaScript.

4. ¿Node.js es un framework?

No. Node.js no es un framework, ni una librería o biblioteca. Nuevamente, Node.js es un ENTORNO EN TIEMPO DE EJECUCIÓN MULTIPLATAFORMA PARA EJECUTAR CÓDIGO JAVASCRIPT FUERA DE UN NAVEGADOR. Node.js tiene algunos frameworks que se usan en el desarrollo web profesional como por ejemplo: Express.js, Adonis.js o Nest.js., pero Node propiamente dicho NO es un framework.

5. ¿Qué necesito saber para poder aprender Node.js?

  • Node al manejar JavaScript como lenguaje de programación, es imperante que sepas conceptos básicos/intermedios de este lenguaje.
  • Se recomienda mucho saber HTML Y CSS, la base de toda la web.
  • Node es ampliamente usado en desarrollo de API's, entender sus conceptos, que son, como funcionan, etc., es muy muy importante.
  • Conceptos básicos de bases de datos.

6. ¿Node.js es asíncrono por defecto?

Si. Node.js es asíncrono por defecto. Pese a que el core JavaScript solo usa un hilo o proceso para ejecutar su código es suficiente para poder hacer software asíncrono o no bloqueante.
Otras tecnologias como por ejemplo Asp.net de Microsoft necesita de algunos retoques para lograr que su código C# se ejecute asíncronamente.

Este tema es particularmente complejo y considerado avanzado por la comunidad, sino lo comprendes pronto no te sientas mal, son conceptos complicados de asimilar y que abruman a la gran mayoría de programadores. Tómalo con calma.

7. ¿Cual es la diferencia entre Módulo/Dependencia/Paquete?

En pocas palabras son lo mismo. Ja!
Me costó un poco al principio diferenciar estos 3 conceptos, pero con el tiempo y la práctica uno se va dando cuenta que son lo mismo aunque en ningún curso online lo mencionen. Así que, si entendemos uno, entenderemos los tres.
Una dependencia básicamente es un código escrito por un tercero, testeado y probado por la comunidad que podemos usar gratuitamente para nuestros proyectos. Podemos acceder a estas dependencias mediante el Administrador de Paquetes de Node o NPM por sus siglas en ingles (Node Package Manager).
Por ejemplo, todos sabemos que Bootstrap es un framework CSS que nos permite estilizar nuestras apps sin necesidad de escribir muchas clases propias, entonces podemos instalar Bootstrap como dependencia de nuestro proyecto.

Este tema es más amplio de lo que piensas, por ello en el futuro le dedicaré su propio post. Paciencia.😌

8. Cuando instalamos Node.js, ¿Cuál es la diferencia entre la versión LTS y la versión Current?

La versión LTS significa "Long-Term Support" o versión soportada a largo plazo, esta versión es la que siempre debes usar en producción puesto que ya pasó todo un proceso de testeo y eliminación de bugs, por ende, es estable y no te dará ningún dolor de cabeza trabajar con ella.

La versión Current o experimental posee las últimas actualizaciones de node, muchas de ellas aun no están probadas como se debería, entonces no es estable y puede producir errores bastante raros en tus programas, está disponible para que los desarrolladores puedan probar las nuevas funcionalidades de Node y filtren bugs para futuras versiones.

Una versión Current permanece 6 meses en este estado antes de pasar a LTS.

9. ¿Qué es el Global Object u Objeto Global de Node?

En JavaScript del navegador el objeto global es window, en Node dicho objeto no existe, puesto que no se ejecuta sobre un browser, el objeto global de Node es global.
En este objeto global cuelga por ejemplo el objeto console con todas su variantes: console.log(), console.error(), console.info(), etc., también podemos encontrar los métodos setTimeout() y setInterval(). Todos estos no necesitan importarse para su uso, simplemente se invocan.

En Node.js no existen las API´s del navegador, no intentes usar por ejemplo el Local Storage, Geolocalización, o el DOM; no intentes escribir un document.querySelector() en Node, simplemente no existe.

10. ¿Por que importamos/exportamos módulos con require/module.exports y no con import de ES6?

Con la llegada de ES6 pudimos obtener la funcionalidad de los módulos usando la sintaxis import {modulo} from 'ubicación_modulo' para importarlos y export o export default para exportarlos. De esta manera se trabaja con módulos en el frontend, pero cuando trabajamos con Node.js el estándar para trabajar con módulos es usando CommonJS.

CommonJS es un proyecto que define una serie de especificaciones para el ecosistema de Javascript, fuera del navegador (por ejemplo, en el lado del servidor o para aplicaciones de escritorio).

CommonJS usa require para importar un módulo, y module.exports para exportarlo. Es el estándar de Node para trabajar con módulos.

En la actualidad si trabajas con algún tipo de empaquetado de código como Webpack puedes configurar tu proyecto Node para que soporte módulos de ES6, no es muy recomendable por que aun no es compatible con todos los paquetes de Node.

11. Referencias


12. Conclusiones

  • Node.js es un ENTORNO EN TIEMPO DE EJECUCIÓN MULTIPLATAFORMA PARA EJECUTAR CÓDIGO JAVASCRIPT FUERA DE UN NAVEGADOR.
  • Node es usado para prototipado de apps, desarrollo con metodologías ágiles, rápida escalabilidad y posee una acogedora comunidad.
  • Node.js no es un lenguaje de programación.
  • Node.js no es un framework o libreria.
  • Para aprender Node.js es necesario tener conocimientos de HTML, CSS, JavaScript moderno, uso de API's y lo básico de bases de datos.
  • Node.js es asíncrono por defecto.
  • Módulo, dependencia y paquete son sinónimos.
  • La versión LTS es la última versión estable de Node.js. La versión Current es la que tiene las últimas características pero no es estable. Usa siempre LTS.
  • El objeto global de Node.js es global. No existe manejo del DOM en Node.js. Olvídate de las API's del navegador.
  • Node.js usa la sintaxis de Common.js para importar y exportar módulos. Gracias a Webpack es posible usar módulos de ES6, pero aun no es soportado en su totalidad.

Quiza sea de tu interés leer los siguientes posts de mi autoría:

35