我的节点服务器上有两个相互需要的js文件。两者都有通过module.exports
机制公开的对象。
第一个文件位于bl/commands.js
下,使用:
var smUtil = require('./../utils/smUtil');
第二个文件位于utils/smUtil.js
下,使用:
var commands = require('./../bl/commands');
当一个函数从smUtil.js
运行并使用commands.js
的一些属性时,看起来command
是一个空对象,导入不成功。
这里有一个问题,当我在commands.js
中删除smUtil
表单的require
时,一切都正常工作,这让我认为我正在做一个新的错误。
有什么想法吗?
发布于 2015-12-21 15:46:05
Node.js documentation about circular dependencies
返回空对象是完全正确的。
引用Node.js文档
当main.js加载a.js时,a.js依次加载b.js。此时,b.js尝试加载a.js。为了防止无限循环,会向b.js模块返回a.js exports对象的未完成副本。然后,b.js完成加载,并将其导出对象提供给a.js模块。
一种解决方案可能是创建一个单独的文件来要求两个文件都在那里,并实例化该文件以避免循环依赖。
发布于 2015-12-21 15:57:22
解决我的问题的具体解决方案是将var smUtil = require('./../utils/smUtil');
放在commands.js
中的module.exports
下。
然而,我觉得这个解决方案并不是最好的。
感谢: coderwall.com/p/myzvmg/circular-dependencies-in-node-js的作者
https://stackoverflow.com/questions/34390910
复制相似问题