Skip to content

Importaciones

Nodejs nos deja importar módulos de dos formas para segmentar nuestro código de forma más cómoda en nuestros proyectos, CommonJS y ES Modules.

CommonJS

CommonJS es el sistema de módulos que usa Nodejs por defecto, fué la primera implementación de este patrón disponible. Para importar un módulo, usamos la función require y le pasamos la ruta al archivo que queremos importar.

En ocasiones, los desarrolladores usan la extensión .cjs para indicar que un archivo usa el sistema de módulos CommonJS.

js
// index.js.js
const fs = require('fs');
const miModulo = require('./mi_modulo.js');
// index.js.js
const fs = require('fs');
const miModulo = require('./mi_modulo.js');

Para exportar un módulo, asignamos el valor que queremos exportar a la propiedad exports del objeto module.

js
// mi_modulo.js

const miModulo = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

module.exports = miModulo;
// mi_modulo.js

const miModulo = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

module.exports = miModulo;

También podemos exportar un módulo asignando un objeto a la propiedad exports del objeto module directamente si sólo necesitamos exportar una parte del código.

js
// mi_modulo.js

module.exports = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};
// mi_modulo.js

module.exports = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

O exportar un objeto con varias propiedades.

js
// mi_modulo.js

const usuario = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

function saludo () {
  console.log(`Hola, me llamo ${usuario.nombre} ${usuario.apellido} y tengo ${usuario.edad} años.`);
}

module.exports = {
  usuario,
  saludo,
};
// mi_modulo.js

const usuario = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

function saludo () {
  console.log(`Hola, me llamo ${usuario.nombre} ${usuario.apellido} y tengo ${usuario.edad} años.`);
}

module.exports = {
  usuario,
  saludo,
};

ES Modules

ES Modules es el sistema de módulos que usa JavaScript por defecto. Para importar un módulo, usamos la palabra reservada import seguida de la ruta al archivo que queremos importar.

En ocasiones, los desarrolladores usan la extensión .mjs para indicar que un archivo usa el sistema de módulos ES Modules.

js
// index.js

import fs from 'fs';
import miModulo from './mi_modulo.js';
// index.js

import fs from 'fs';
import miModulo from './mi_modulo.js';

Para exportar un módulo, usamos la palabra reservada export seguida del valor que queremos exportar.

js
// mi_modulo.js

const miModulo = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

export default miModulo;
// mi_modulo.js

const miModulo = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

export default miModulo;

En este caso, sólo podemos exportar un valor por defecto por archivo. Si queremos exportar varios valores, podemos usar la palabra reservada export seguida de la palabra reservada default para exportar un valor por defecto, y la palabra reservada export seguida de la palabra reservada const para exportar valores adicionales.

js
// mi_modulo.js

const usuario = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

function saludo () {
  console.log(`Hola, me llamo ${usuario.nombre} ${usuario.apellido} y tengo ${usuario.edad} años.`);
}

export default usuario;
export { saludo };
// mi_modulo.js

const usuario = {
  nombre: 'Juan',
  apellido: 'García',
  edad: 30,
};

function saludo () {
  console.log(`Hola, me llamo ${usuario.nombre} ${usuario.apellido} y tengo ${usuario.edad} años.`);
}

export default usuario;
export { saludo };

Uso de nombres nativos de paquetes globales

Desde hace poco, en Nodejs recomiendan usar los nombres nativos de los paquetes globales en lugar de los nombres cortos. Por ejemplo, en lugar de usar fs, debemos usar node:fs con el fin de evitar conflictos entre diferentes paquetes.

js
// index.js

import fs from 'node:fs';
// index.js

import fs from 'node:fs';

Convertir entre CommonJS y ES Modules

Cuando usamos las extensiones .cjs o .mjs, Nodejs usa el sistema de módulos correspondiente. Además nos mostrará algunas ayudas extra en nuestro editor si usamos VSCode.