避免循环依赖,同时保持"模块"快递结构

时间:2016-10-17 23:24:14

标签: javascript node.js ecmascript-6 circular-dependency

我在ES6中编写了一个快速应用程序,我正在使用的文件结构是按功能对文件进行分组。每个模块都有一个index.js,它负责导出任何相关的方法,类等。其他兄弟模块只需要来自另一个模块的index.js

但是我遇到了循环依赖的问题。例如,我有一个导出的User模块:

export routes from './routes';
export default from './User'; //model
export helpers from './helpers';

然后我有另一个类似的模型Session

export routes from './routes';
export helpers from './helpers';

问题在于,session/routes使用来自user/helpers的内容,user/routes使用来自session/helpers的内容。 session/routers中的导入为import {helpers} from '../useruser/routers中的导入为import {helpers} from '../session'

这导致两个模块之间通过各自的index.js文件循环依赖。

这会导致问题,因为有时当我在某个第三个模块中导入包时,它会在第一个刻度时为空。

除了在两个模块routes中不包括index.js作为导出的显而易见的解决方案之外,是否还有其他解决方案来解决这个问题?

1 个答案:

答案 0 :(得分:0)

总是很难管理依赖项并遇到这个问题。您建议的明显解决方案也是最好的解决方案,但尝试找出需要解耦的部分并创建新模块以适应这种情况。

我建议的另一个解决方案是使用一个模块来解决你的依赖关系,它会在应用程序启动时通知你你有循环依赖问题并且根本不会启动应用程序。我不知道你的项目有多大,但如果很大,那么插入这样的模块将非常困难。你可以看看以下模块: