Node.js: Un viztazo a CommonJS
En el mundo de JavaScript especialmente en el entorno de Node.js, CommonJS es uno de los sistemas de módulos más conocidos. Si alguna vez has trabajado con aplicaciones en Node.js, es muy probable que ya hayas utilizado CommonJS, aunque tal vez no te hayas dado cuenta de ello. En este post, exploramemos qué es CommonJS, cómo funciona, etc.
¿Qué es CommonJS?
CommonJS es un conjunto de especificaciones para módulos en JavaScript que define cómo deberían ser los módulos, las dependencias y la forma en que deberían interactuar entre sí. Fue creado para proporcionar una forma estándar de escribir módulos en JavaScript, especialmente con el objetivo de utilizar javaScript fuera del navegador, en entornos como Node.js.
En otras palabras, CommonJS fue diseñado para facilitar la modularización de JavaScript, lo que permite que el código sea más organizado y reutilizable.
¿Por qué CommonJS es importante en Node.js
Node.js, el entorno de ejecución de JavaScript del lado del servidor, utiliza CommonJS para manejar sus módulos de forma predeterminada. Esto significa que, si estás desarrollando con Node.js, estás utilizando CommonJS sin necesidad de configuraciones adicionales.
El sistema de módulos de Node.js (CommonJS) nos permite dividir el código en pequeños archivos (módulos), lo que mejora la legibilidad, la mantenibilidad y la reutilización del código. Cada módulo es autónomo, lo que hace más fácil de controlar dependencias, probar componentes y estructurar proyectos grandes.
Uso de CommonJS en Node.js
En Node.js, cuando queremos importar un módulo con CommonJS, puedes usar require
para importar un módulo de Node.js o tus propios módulos.
Ejemplo para importar un módulo estándar
1
2
const fs = require('fs'); // Importa el módulo fs de Node.js (sistema de archivos)
const mi_modulo = require('./mi_modulo'); // Importa el módulo llamado mi_modulo.js
Limitaciones de CommonJS
A pesar de ser muy popular, CommonJS tiene algunas limitaciones, especialmente cuando se comparan con otras soluciones de módulos, como ES Modules (ESM). Algunas de las limitaciones son:
Carga sincrónica: Los módulos se cargan de forma sincrónica, lo que puede ser ineficiente en ciertas situaciones, especialmente cuando se requieren módulos grandes.
Falta de soporte para importaciones estáticas: En CommonJS, las importaciones son dinámicas y no pueden ser estáticas como en ES Modules. Lo que significa que en CommonJS las importaciones son resueltas en tiempo de ejecución y en ES Modules son resueltas antes de la ejecución del código. Esta es una característica clave de las importaciones estáticas ya que garantiza que los módulos y sus dependencias se resuelvan antes de ejecutar cualquier línea de código.
Compatibilidad con el navegador:
Mi lema es