ES6模块是同步加载还是异步加载?

时间:2015-08-04 11:14:53

标签: javascript node.js module ecmascript-6

模块加载器负责加载模块。

我所知道的是模块加载器异步加载浏览器中的模块,而在Node.js中它同步加载。

我想确认这些信息是否正确。

1 个答案:

答案 0 :(得分:7)

ES6模块加载器将是异步的,而node.js模块加载器则不是。

以下是模块加载器的一些关键方面:

  
      
  • 模块代码自动以严格模式运行,无法选择退出严格模式。

  •   
  • 在模块顶层创建的变量不会自动添加到共享全局范围。它们只存在于   模块的顶级范围。

  •   
  • 模块顶层的this值未定义。在代码中不允许HTML样式的注释(来自的剩余功能)   早期的浏览器日。)

  •   
  • 模块必须导出模块外部代码可用的任何内容。

  •   

https://leanpub.com/understandinges6/read#leanpub-auto-modules

  

模块通常可以为开发人员解决几个问题。第一,   它们允许开发人员将代码分成更小的部分,称为   模块。其次,它们使开发人员可以轻松加载(注入)   那些模块进入其他代码段。注入模块   这样有助于保持项目代码与模块脱钩(阅读:   提高可测试性)。 第三,模块可以加载脚本   异步。这意味着应用程序可以更快地开始加载   它们不需要在执行代码之前加载所有脚本。

http://chimera.labs.oreilly.com/books/1234000001623/ch03.html#_default_values

另一方面,因为node.js基于同步的require,这意味着node.js不提供开箱即用的异步变体。

当然,节点(async-require)有异步模块加载器,但不支持本机(带有require)。