Articles

.exportaciones y exportaciones en Nodo.js

Posted by admin

en programación, los módulos son unidades autónomas de funcionalidad que se pueden compartir y reutilizar entre proyectos. Hacen nuestra vida como desarrolladores más fácil, ya que podemos usarlos para aumentar nuestras aplicaciones con funcionalidades que no hemos tenido que escribir nosotros mismos. También nos permiten organizar y desacoplar nuestro código, lo que conduce a aplicaciones que son más fáciles de entender, depurar y mantener.

en este artículo, examinaré cómo trabajar con módulos en Node.JS, centrándose en cómo exportarlos y consumirlos.,

diferentes formatos de módulo

como JavaScript originalmente no tenía un concepto de Módulos, una variedad de formatos competidores han surgido con el tiempo. Aquí hay una lista de los principales a tener en cuenta:

  • El formato de definición de módulo asíncrono (AMD) Se utiliza en los navegadores y utiliza una función define para definir módulos.
  • El formato CommonJS (CJS) se utiliza en Node.js y utiliza require y module.exports para definir dependencias y módulos. El ecosistema npm se basa en este formato.
  • El formato del módulo ES (ESM)., A partir de ES6 (ES2015), JavaScript admite un formato de módulo nativo. Utiliza una palabra clave export para exportar la API pública de un módulo y una palabra clave import para importarla.
  • El Sistema.el formato de registro fue diseñado para soportar módulos ES6 dentro de ES5.
  • El formato de definición de módulo Universal (UMD) se puede utilizar tanto en el navegador como en el nodo.js. Es útil cuando un módulo necesita ser importado por varios cargadores de módulos diferentes.

tenga en cuenta que este artículo trata únicamente del formato CommonJS, el estándar en Node.js., Si quieres leer en cualquiera de los otros formatos, te recomiendo este artículo, del autor de SitePoint Jurgen Van de Moere.

requiere un módulo

nodo.js viene con un conjunto de módulos integrados que podemos utilizar en nuestro código sin tener que instalarlos. Para hacer esto, necesitamos requerir el módulo usando la palabra clave require y asignar el resultado a una variable. Esto se puede usar para invocar cualquier método que el módulo exponga.,

por ejemplo, para enumerar el contenido de un directorio, puede usar el módulo del sistema de archivos y su método readdir:

tenga en cuenta que en CommonJS, los módulos se cargan de forma sincrónica y se procesan en el orden en que ocurren.

crear y exportar un módulo

ahora veamos cómo crear nuestro propio módulo y exportarlo para usarlo en otro lugar de nuestro programa., Comienza por la creación de un user.js archivo y agregar la siguiente:

const getName = () => { return 'Jim';};exports.getName = getName;

Ahora crear un index.js archivo en la misma carpeta y añadir esto:

const user = require('./user');console.log(`User: ${user.getName()}`);

Ejecute el programa con node index.js y usted debería ver el resultado siguiente en la terminal:

User: Jim

Entonces, ¿qué ha pasado aquí?, Bueno, si miras el archivo user.js, notarás que estamos definiendo una función getName, luego usaremos la palabra clave exports para que esté disponible para importar en otro lugar. Luego, en el archivo index.js, estamos importando esta función y ejecutándola. También tenga en cuenta que en la instrucción require, el nombre del módulo tiene el prefijo ./, ya que es un archivo local. También tenga en cuenta que no es necesario agregar la extensión de archivo.,

Exportar Múltiples Métodos y Valores

podemos exportar varios métodos y valores de la misma manera:

Y en el index.js:

const user = require('./user');console.log( `${user.getName()} lives in ${user.getLocation()} and was born on ${user.dob}.`);

El código anterior produce esto:

Jim lives in Munich and was born on 12.01.1982.

Observe cómo el nombre que damos a la exportado dateOfBirth variable puede ser cualquier cosa que nos apetece (dob en este caso). No tiene que ser el mismo que el nombre de la variable original.,

variaciones en la sintaxis

También debo mencionar que es posible exportar métodos y valores sobre la marcha, no solo al final del archivo.

Por ejemplo:

exports.getName = () => { return 'Jim';};exports.getLocation = () => { return 'Munich';};exports.dob = '12.01.1982';

Y gracias a la desestructuración de la asignación, podemos cherry-pick lo que desea importar:

const { getName, dob } = require('./user');console.log( `${getName()} was born on ${dob}.`);

Como era de esperar, esta registros:

Jim was born on 12.01.1982.

Exportar un Valor Predeterminado

En el ejemplo anterior, estamos exportando funciones y valores de forma individual., Esto es útil para funciones auxiliares que podrían necesitarse en toda una aplicación, pero cuando tiene un módulo que exporta solo una cosa, es más común usar module.exports:

y en index.js:

const User = require('./user');const jim = new User('Jim', 37, '[email protected]');console.log(jim.getUserStats());

el código anterior registra esto:

Name: JimAge: 37Email: [email protected]

Cuál es la diferencia entre el módulo.¿exportaciones y exportaciones?,

en sus viajes por la Web, puede encontrar la siguiente sintaxis:

module.exports = { getName: () => { return 'Jim'; }, getLocation: () => { return 'Munich'; }, dob: '12.01.1982',};

Aquí estamos asignando las funciones y valores que queremos exportar a una propiedad exports En module — y por supuesto, esto funciona bien:/p>

const { getName, dob } = require('./user');console.log( `${getName()} was born on ${dob}.`);

esto registra lo siguiente:

Jim was born on 12.01.1982.

entonces, ¿cuál es la diferencia entre module.exports y exports? ¿Es uno solo un alias útil para el otro?,

Bueno, un poco, pero no del todo …

Para ilustrar lo que quiero decir, vamos a cambiar el código en el index.js para registrar el valor de module:

console.log(module);

Esto produce:

Como puede ver, el module tiene un exports propiedad. Vamos a añadir algo a esto:

// index.jsexports.foo = 'foo';console.log(module);

Esta salida es:

Module { id: '.', exports: { foo: 'foo' }, ...

Asignación de propiedades exports también añade a module.exports., Esto se debe a que (inicialmente, al menos) exports es una referencia a module.exports.

Entonces, ¿cuál debo usar?

As module.exports and exports both point to the same object, it doesn’t normally matter which you use. Por ejemplo:

exports.foo = 'foo';module.exports.bar = 'bar';

Este código daría como resultado que el objeto exportado del módulo fuera{ foo: 'foo', bar: 'bar' }.

sin Embargo, hay una advertencia. Lo que le asigne module.exports es lo que se exporta desde su módulo.,

por lo tanto, tome lo siguiente:

exports.foo = 'foo';module.exports = () => { console.log('bar'); };

esto solo resultaría en una función anónima exportada. La variable foo sería ignorada.

si quieres leer más sobre la diferencia, te recomiendo este artículo.

conclusión

Los módulos se han convertido en una parte integral del ecosistema JavaScript, lo que nos permite componer programas grandes a partir de partes más pequeñas. Espero que este artículo le haya dado una buena introducción a trabajar con ellos en Node.js, además de ayudar a desmitificar su sintaxis.

Leave A Comment