Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 ES6模块是同步加载还是异步加载?_Javascript_Node.js_Module_Ecmascript 6 - Fatal编程技术网

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

Javascript ES6模块是同步加载还是异步加载?,javascript,node.js,module,ecmascript-6,Javascript,Node.js,Module,Ecmascript 6,模块加载器负责加载模块 我所知道的是模块加载器在浏览器中异步加载模块,而在Node.js中它是同步加载的 我想确认此信息是否正确。ES6模块加载器将是异步的,而node.js模块加载器不是 以下是模块加载器的一些关键方面: 模块代码自动在严格模式下运行,无法选择退出严格模式 在模块顶层创建的变量不会自动添加到共享全局范围。它们只存在于内部 模块的顶级范围 模块顶层的此值未定义。不允许在代码中使用HTML样式的注释(来自 早期的浏览器时代) 模块必须导出应可用于模块外部代码的任何内容 通常,

模块加载器负责加载模块

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


我想确认此信息是否正确。

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

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

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

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

  • 模块顶层的
    值未定义。不允许在代码中使用HTML样式的注释(来自 早期的浏览器时代)

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

通常,模块为开发人员解决了几个问题。第一, 它们允许开发人员将代码分成更小的部分,称为 模块。其次,它们使开发人员能够轻松地加载(注入) 将这些模块转换为代码的其他部分。注入模块的 这样有助于保持项目代码与模块的解耦(如下所示: 改进的可测试性)<第三,模块可以加载脚本 异步。这意味着应用程序可以更快地开始加载,就像 它们不要求在执行代码之前加载所有脚本

另一方面,由于
node.js
基于同步的
require
,这意味着
node.js
不提供现成的异步变体


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

问题是什么?ES6没有指定模块应该如何加载,并且支持这两种方式。那么,您想了解哪种特定的模块加载程序?请注意,node根本没有ES6模块加载器,因此我们很难告诉您有关它的任何信息。我建议你把最后一句话放在第一位。我通读了你的全部答案,并认为你直到最后一句才回答这个问题。答案中的信息通常很好,但我建议您先回答问题,然后再了解其他信息。“ES6模块加载程序将是异步的”这是错误的(或者至少做出了假设)。ES6没有指定如何加载模块。如何加载使用ES6定义的模块很可能取决于代码运行的环境。另外,考虑到ES6模块的定义方式,所有依赖项必须在模块本身能够执行之前加载,这使得依赖项如何加载变得无关紧要。那么——实验模块呢?然后是相同的rt(假设您使用mjs)。