Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析循环依赖关系/JS_Javascript_Node.js_Refactoring_Circular Dependency - Fatal编程技术网

Javascript 解析循环依赖关系/JS

Javascript 解析循环依赖关系/JS,javascript,node.js,refactoring,circular-dependency,Javascript,Node.js,Refactoring,Circular Dependency,我在一些JS文件和要解决的步骤之间有一个循环依赖关系 问题1:移动是否需要解决方案? 使代码正常工作的一种方法是在函数中简单地移动require()语句,如: static getTokens(qo) { const FaqModel = require('../FaqModel') // do stuff with FaqModel is OK now 这是否意味着require将在getTokens()方法的每次调用上运行?我觉得很恶心。 或者这是一个足够好的解决方案

我在一些JS文件和要解决的步骤之间有一个循环依赖关系

问题1:移动
是否需要
解决方案?
使代码正常工作的一种方法是在函数中简单地移动
require()
语句,如:

  static getTokens(qo) {
    const FaqModel = require('../FaqModel')
    // do stuff with FaqModel is OK now
这是否意味着require将在
getTokens()
方法的每次调用上运行?我觉得很恶心。 或者这是一个足够好的解决方案

Q2发现方法 这不是一个简单的req B和B req a的情况。在某个地方,多个文件之间有一个循环。上次我查看工具发现依赖性并没有给出明确的答案,所以想知道最优秀的人是如何找到这个答案的

Q3重构策略 我计划将
FaqModel
中需要的所有内容重构到第三个文件中,并且只需要从每个导致循环dep的案例中进行重构,例如,只需要朝一个方向进行。如果可能的话,您只需要向下而不需要向上。但这似乎过于简单化了。 在高层次上,还有哪些其他方法可以避免设计中的循环DEP


谢谢

需要更多的细节来回答您如何解决特定的依赖性问题。但是,这是一个很好的策略,有助于识别问题:


注释掉所有内容,然后慢慢地重新添加功能。从需要最少依赖性的特性开始,然后朝着依赖性更多的特性努力。最终事情会破裂。如果您以增量方式执行此操作,这将有助于您查找此问题涉及的一个或多个依赖项。

请使用演示此问题的示例更新您的问题。另外,告诉我们环境是什么。(Node.js?或某种CommonJS实现?)例如,Node.js处理循环依赖关系。涉及多个源代码文件,因此我不打算发布完整的实现。无论如何,问题不在于解决一个孤立的案例,而在于如何解决这个问题的一般策略。nodeJS FYI不能很好地处理循环DEP,它只是创建了一个空对象,这样解析器就不会被锁定在循环中;请阅读链接的帮助页面。请再次说明:请指定环境。如果是Node.js,请这样说(添加标记就足够了)。“这是否意味着require将在每次调用getTokens()方法时运行?”-是的。但是
require
缓存模块对象并再次返回,它不会再次加载和计算模块代码。@dcsan我的意思是不创建自己的对象,而是修改已经存在的
module.exports
对象。看,是的,我这样做了,但这是一个非常钝的工具方法。