![]() |
1
91
同时节点.js允许循环
|
![]() |
2
183
尝试设置属性
|
![]() |
3
55
[编辑]现在不是2015年,大多数图书馆(如express)已经用更好的模式进行了更新,因此不再需要循环依赖。我只推荐 不使用它们 .
问题是模块.导出定义了 之后 你需要B级。 (约翰尼赫的链接显示) 循环依赖在节点中工作得很好,它们只是同步定义的。
app
从其他文件)
只需确保定义了必要的导出即可 之前 您需要具有循环依赖关系的文件。 这将打破:
这将起作用:
我一直使用这个模式来访问快递.js
|
![]() |
4
39
如果确实要替换模块.导出,例如,如果您要创建一个类(如上面示例中的b.js文件),这也是可能的,只需确保在启动循环require的文件中模块.导出=…'语句发生在require语句之前。 a、 js公司 (主文件与节点一起运行)
|
![]() |
5
15
解决方案是在需要任何其他控制器之前“转发声明”导出对象。所以,如果你把所有的模块都这样结构,你就不会遇到这样的问题:
|
![]() |
6
8
一个需要最小变化的解决方案是扩展
b、 js-使用方法do from a.js的模块
它将工作并产生:
虽然此代码不起作用: a、 js公司
b、 js公司
输出:
|
![]() |
7
7
您可以很容易地解决这个问题:只需在需要使用的模块中的任何其他内容之前导出数据模块.导出: A级.js
B.js类
|
![]() |
8
6
当然,最好将所有require语句放在文件的顶部。但是在那里 是 在某些场合,我原谅自己从一个不相关的模块中挑选了一些东西。称之为黑客攻击,但有时这比引入进一步的依赖关系、添加额外的模块或添加新的结构(EventEmitter等)要好 |
![]() |
9
6
我见过的另一种方法是在第一行导出并将其保存为本地变量,如下所示:
我倾向于用这种方法,你知道它的缺点吗? |
|
10
4
这里有一个快速的解决方法,我发现它很有用。 文件“a.js”
在文件'b.js'上写下
这样,在事件循环类的下一次迭代中将正确定义这些require语句将按预期工作。 |
![]() |
11
4
唯一真正的缺点是需要重复
我觉得EC的回答更类似于以下的模式:
这个
这个模式不是很漂亮,所以我只在需要解决循环依赖问题时使用它。 reveal pattern ,因为您可以轻松地从对象中添加和删除导出,尤其是在使用ES6时 property shorthand .
|
![]() |
12
2
事实上,我最终需要依靠
|
![]() |
13
1
避免这种情况的一种方法是不需要另一个文件中的某个文件,只要将它作为参数传递给函数,就可以满足您在另一个文件中需要的任何内容。 这样就不会产生循环依赖。 |
![]() |
14
0
如果不能消除循环依赖关系(例如useraccount<-->userlogin),还有一个选项。。。
就像使用
|
![]() |
Josue Abotsidia · 创建NextJS项目时出错 5 月前 |
![]() |
Zak · 令牌认证路由的页面刷新重定向到React中的404页面 6 月前 |
![]() |
DSATH · 我的lambda在代码完成之前就结束了,我不知道为什么 6 月前 |