循环依赖项返回未定义

时间:2019-03-16 06:58:56

标签: javascript ecmascript-6 dependencies babeljs

我想重构我的Nodejs / Babel 7应用程序。这是一个带有Bookshelf.js模型的GraphQL应用程序,用于控制数据库。因此,我将代码分为几部分:

  • index.js,server.js和其他一些“免费”文件,它们基本上是应用程序的入口点
  • 带有模型的目录,以种类索引文件结尾,用于转发导出内容(以下示例)
  • 具有GQL类型的目录,具有相似的索引文件
  • 具有GQL查询的目录,同样具有相似的索引文件
  • 包含服务的目录,相似的索引文件

到目前为止,一切都很好。在重构模块之前,直接导入了某些其他模块,因此希望进行漂亮的单行导入,例如:

import {Contact, Product, Set, Content, User} from 'models/Models'

但是...这是一个问题。我的模块之间相互依赖。我的意思是,模型有时会导入服务或类型,服务可能会导入模型,依此类推。运行代码时,我发现了一堆“预期的东西,但发现未定义的”错误。我研究了此问题,发现这是由于循环依赖关系导致的-我的索引文件未完全加载,因此它们返回的是未定义的。有趣的是,在我重新组织代码之前,一切都可以正常工作(因此,循环依赖没有真正的问题,可以通过编译器解决它们,但是当我使用“索引”文件来构造导入时,它就无法实现)。

显而易见的解决方案是返回以前的结构并继续使用它,但这只是短期解决方案。我该如何解决这个问题?

“索引”文件示例(已修剪):

export { default as Contact } from 'models/ancestor/Contact'
export { default as Content } from 'models/ancestor/Content'

export { default as UserData } from 'models/mega/UserData'

export { default as Action } from 'models/organization/Action'
export { default as Connection } from 'models/organization/Connection'

0 个答案:

没有答案