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

Nar*_*sty 4 javascript module node.js ecmascript-6

模块加载器负责加载模块.

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

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

End*_*imo 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).

  • *"ES6模块加载器将是异步的"*这是错误的(或至少做出假设).ES6未指定应如何加载模块.如何加载使用ES6定义的模块最有可能取决于代码运行的环境.此外,考虑到定义ES6模块的方式,所有依赖项必须在模块本身可以执行之前加载,这使得与依赖项的加载无关. (5认同)