【问题标题】:Circular dependencies in ES6/7ES6/7 中的循环依赖
【发布时间】:2016-11-03 06:15:04
【问题描述】:

我惊讶地发现,在 Babel 中,我可以有两个模块 import 彼此没有任何问题。我在 Babel 中找到了一些将其称为已知和预期行为的地方。我知道这被很多人(我猜是大多数人)广泛认为是一种反模式,但请忽略这个问题:

有谁知道这在 ES6/7 中是否(或将是)正确的行为?

我能找到的最接近官方答案(和技术解释)的是this comment on 2ality.com

【问题讨论】:

  • 是的,这通常被认为是不好的做法。但是 ES 模块旨在支持循环依赖。 ES 2017 规范15.2.1.16.3ResolveExport Concrete Method 中有一些信息。但是,我认为这真的很难阅读。 This post 可能更易读。
  • @Leo -- 你引用的规范(我在研究中忽略了它)是我正在寻找的(尽管我实际上在我的问题中链接到那个帖子;p)。您可能应该将您的评论作为答案发表,因为我很乐意接受。毫无疑问,在 OO 中,circ。 deps 通常是一支脚枪。但是随着 JS 越来越倾向于更多的 FP 模式,我认为交叉依赖模块不再是一种自动反模式。也就是说,OO 开发人员需要停止在他们的脚下射击,所以警告总是明智的。
  • @FelixKling -- 谢谢。我曾经在 require.js 中做所有的 JS,这迫使你手动处理自己的循环依赖(如果我没记错的话,会填充一个交叉依赖,然后在加载完所有内容后重新解析它)。但是,如果我正确阅读了规范(感谢@Leo),看起来最初的“未定义”分辨率(最终)将不再存在(除了在 polyfills 中)。实际的语言支持将是惊人的。

标签: javascript ecmascript-6 babeljs circular-dependency ecmascript-2016


【解决方案1】:

这通常被认为是不好的做法。但是 ES 模块旨在支持循环依赖。 ES 2017 规范15.2.1.16.3ResolveExport Concrete Method 中有一些信息。但是,我认为它真的很难阅读(说实话,我很痛苦)。您提到的来自 2ality.com 的帖子可能更具可读性。

【讨论】:

    【解决方案2】:

    我使用的是 nodeJS,所以它是一样的。据我所知,“要求循环”并不违法,即使通常最好避免它们。如果有一个循环,nodeJS 至少会处理它:它不需要第二次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 2010-09-12
      • 2021-10-02
      相关资源
      最近更新 更多