Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

841
Vistas
Usar Node.js require vs. ES6 importar/exportar

En un proyecto en el que estoy colaborando, tenemos dos opciones sobre qué sistema de módulos podemos usar:

  1. Importación de módulos usando require y exportación usando module.exports y exports.foo .
  2. Importación de módulos mediante la import de ES6 y exportación mediante export de ES6

¿Hay algún beneficio de rendimiento al usar uno sobre el otro? ¿Hay algo más que debamos saber si tuviéramos que usar módulos ES6 en lugar de los de Node?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Actualizar

Desde Node v12 (abril de 2019), la compatibilidad con los módulos ES está habilitada de forma predeterminada y desde Node v15 (octubre de 2020) es estable (consulte aquí ). Los archivos que incluyen módulos de nodo deben terminar en .mjs o el archivo package.json más cercano debe contener "type": "module" . La documentación de Node tiene mucha más información, también sobre la interoperabilidad entre los módulos CommonJS y ES.

En cuanto al rendimiento, siempre existe la posibilidad de que las funciones más nuevas no estén tan optimizadas como las funciones existentes. Sin embargo, dado que los archivos del módulo solo se evalúan una vez, es probable que se pueda ignorar el aspecto del rendimiento. Al final, debe ejecutar puntos de referencia para obtener una respuesta definitiva de todos modos.

Los módulos ES se pueden cargar dinámicamente a través de la función import() . A diferencia de require , esto devuelve una promesa.


Respuesta anterior

¿Hay algún beneficio de rendimiento al usar uno sobre el otro?

Tenga en cuenta que todavía no existe un motor de JavaScript que admita de forma nativa los módulos ES6. Tú mismo dijiste que estás usando Babel. Babel convierte la declaración de import y export a CommonJS ( require / module.exports ) de forma predeterminada de todos modos. Entonces, incluso si usa la sintaxis del módulo ES6, usará CommonJS bajo el capó si ejecuta el código en Node.

Existen diferencias técnicas entre los módulos CommonJS y ES6, por ejemplo, CommonJS le permite cargar módulos dinámicamente. ES6 no permite esto, pero hay una API en desarrollo para eso .

Dado que los módulos ES6 son parte del estándar, los usaría.

over 4 years ago · Santiago Trujillo Denunciar

0

Hay varios usos/capacidades que quizás desee considerar:

Exigir:

  • Puede tener una carga dinámica donde el nombre del módulo cargado no esté predefinido/estático, o donde cargue condicionalmente un módulo solo si es "realmente necesario" (dependiendo de cierto flujo de código).
  • La carga es sincrónica. Eso significa que si tiene varios require , se cargan y procesan uno por uno.

Importaciones ES6:

  • Puede usar importaciones con nombre para cargar selectivamente solo las piezas que necesita. Eso puede ahorrar memoria.
  • La importación puede ser asíncrona (y en el cargador de módulos ES6 actual, de hecho lo es) y puede funcionar un poco mejor.

Además, el sistema de módulo Require no está basado en estándares. Es muy poco probable que se convierta en estándar ahora que existen los módulos ES6. En el futuro, habrá compatibilidad nativa con los módulos ES6 en varias implementaciones, lo que supondrá una ventaja en términos de rendimiento.

over 4 years ago · Santiago Trujillo Denunciar

0

A partir de ahora, la importación de ES6, la exportación siempre se compila en CommonJS , por lo que no hay ningún beneficio al usar uno u otro. Aunque se recomienda el uso de ES6, ya que debería ser ventajoso cuando se publique el soporte nativo de los navegadores. El motivo es que puede importar parciales de un archivo, mientras que con CommonJS debe solicitar todo el archivo.

ES6 → import, export default, export

CommonJS → require, module.exports, exports.foo

A continuación se muestra el uso común de esos.

Valor predeterminado de exportación ES6

 // hello.js function hello() { return 'hello' } export default hello // app.js import hello from './hello' hello() // returns hello

ES6 exportar múltiples e importar múltiples

 // hello.js function hello1() { return 'hello1' } function hello2() { return 'hello2' } export { hello1, hello2 } // app.js import { hello1, hello2 } from './hello' hello1() // returns hello1 hello2() // returns hello2

Módulo CommonJS.exportaciones

 // hello.js function hello() { return 'hello' } module.exports = hello // app.js const hello = require('./hello') hello() // returns hello

Módulo CommonJS. exporta múltiples

 // hello.js function hello1() { return 'hello1' } function hello2() { return 'hello2' } module.exports = { hello1, hello2 } // app.js const hello = require('./hello') hello.hello1() // returns hello1 hello.hello2() // returns hello2
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda