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

97
Vistas
importaciones circulares con paquete web que devuelve un objeto vacío

Golpeando este problema exacto actualmente:

 FileA: var b = require file B var c = require file C FileB: var a = require file A FileC: var a = require file A

Cuando ejecuto el código, aparece un error en el archivo C:

 A.doSomething is not a function

Lancé un depurador allí y vi que A es un objeto vacío. Lo que es realmente extraño es que solo obtengo un error en el Archivo C, pero no en el Archivo B. Muy confundido aquí.

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

0

Este no es un problema del paquete web sino una propiedad de los módulos CommonJS.

Cuando se requiere por primera vez un módulo CommonJS, su propiedad de exports se inicializa en un objeto vacío en segundo plano.

 module.exports = {};

Luego, el módulo puede decidir extender esta propiedad de exports o anularla.

 exports.namedExport = function() { /* ... */ }; // extends module.exports = { namedExport: function() { /* ... */ } }; // overrides

Entonces, cuando A requiere B y B requiere A inmediatamente después, A no se vuelve a ejecutar (lo que produciría un ciclo infinito), pero se devuelve su propiedad de exports actual. Dado que A requería B en la parte superior del archivo, antes de exportar cualquier cosa, la llamada require('A') en el módulo B producirá un objeto vacío.

Una solución común para las dependencias circulares es colocar las importaciones al final del archivo, después de haber exportado las variables que necesitan otros módulos.

A :

 module.exports = { foo: 'bar' }; require('B'); // at this point A.exports is not empty anymore

B :

 var A = require('A'); A.foo === 'bar';
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