当前位置: 首页 > 面试题库 >

使用webpack返回空对象的圆形导入

尉迟景福
2023-03-14
问题内容

当前遇到此确切问题:

FileA:
var b = require file B
var c = require file C

FileB:
var a = require file A

FileC:
var a = require file A

运行代码时,文件C中出现错误:

A.doSomething is not a function

在其中扔了一个调试器,发现A是一个空对象。什么是 真正 奇怪的是,我只获得了在文件C错误,而不是文件B.超级混淆这里。


问题答案:

这不是webpack问题,而是CommonJS模块的属性。

首次需要CommonJS模块时,其exports属性将初始化为幕后的空对象。

module.exports = {};

然后,模块可以决定扩展此exports属性或覆盖它。

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

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

因此,当Arequire BBrequire
A紧随其后时,A不会再次执行(这将产生无限循环),但是将exports返回其当前属性。由于在文件的最顶部是A必需的B,因此在导出任何内容之前,模块中的require('A')调用B将产生一个空对象。

循环依赖项的一个常见修复方法是, 导出其他模块所需的变量 之后 ,将导入内容放在文件的末尾。

A

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

B

var A = require('A');
A.foo === 'bar';


 类似资料:
  • 我们有一个方法,其中我们收到一个

  • 我开始进入WP开发,我有问题与ACF后对象返回空,我不知道为什么。我创建了一个ACF,分类法的位置等于类别然后字段设置为... 字段名称:推荐的\u资源 然后在岗位上 我得到了无效的任何帮助或指向正确的方向都是非常感谢的。

  • 是否可以删除对象内部的圆形类型? 比方说 到 我想过滤掉对象中的所有圆形类型。 尝试1: 因为每个对象的名称在子对象中也是相同的。我试图删除它,因为大多数孩子的圆形对象只指向父母。(事实上,我对这部分感到困惑)。这是我试图使用的代码。

  • 当在testng单元testcase中运行时,JAXB将XML文件解组到对象中工作正常。 当相同的代码被用来在另一个进程中解封相同的XML文件时,我得到了一个空对象。我可以验证对象是为XML文档中的每个元素创建的,并且所有适配器都被调用。在unmarshaller中设置事件处理程序,但没有验证问题。当我设置xmlns属性和前缀时,即使返回空对象,行为也略有不同。 我看了好几篇文章,但都无法与我面临

  • 问题内容: 我有一个文件夹,其中包含index.js和几个模型(类)index.js book.js author.js 问题在于Author类似乎找不到书!它只是一个空对象。但是,如果我在index.js中切换导出,则将Book放在Author之后- 可以,但是其他模型将停止工作。 我不想做任何骇客工作。 问题答案: 这是因为您具有循环依赖关系。Node.js以非常特定的方式处理此问题: 第一个

  • 问题内容: 我正在尝试序列化以序列化下面包含的json字符串。 我正在使用此gson调用对其进行序列化 我的班主任就是这样。 对于任何其他类变量,它都是这样。当我尝试使用上述调用时,最终会得到具有所有空值的对象。要注意的一件事是json字符串中未提供某些字段,因为不同的api调用提供了这些json字符串的不同部分。我做错了什么? 问题答案: 您提供的JSON根对象具有属性-因此,您有两个选项可以使