Javascript whatwg和#x27;s装载机规格、动态导入建议和<;脚本类型=';模块'>;?
以上三者有何关联?到目前为止,我的理解是:Javascript whatwg和#x27;s装载机规格、动态导入建议和<;脚本类型=';模块'>;?,javascript,ecmascript-6,es6-modules,es6-module-loader,Javascript,Ecmascript 6,Es6 Modules,Es6 Module Loader,以上三者有何关联?到目前为止,我的理解是:ES6规范定义了ES6模块的语法,但没有指定如何加载这些模块。在浏览器环境中使用它们的唯一方法是通过模块脚本。还有一个动态导入操作符建议,允许您有条件地从脚本和模块脚本加载模块。那么,加载程序规范是否说明浏览器如何在后台加载模块脚本?或者它说的是import()操作符在不同环境中的行为?或者它是另外的东西,与上述两个无关?如果加载程序规范说明了import()在不同环境中的行为,那么这与浏览器加载使用的模块的方式有何关系?根据模块加载是由动态导入操作员还
ES6规范
定义了ES6模块
的语法,但没有指定如何加载这些模块。在浏览器环境中使用它们的唯一方法是通过模块脚本。还有一个动态导入操作符建议,允许您有条件地从脚本和模块脚本加载模块。那么,加载程序规范是否说明浏览器如何在后台加载模块脚本?或者它说的是import()
操作符在不同环境中的行为?或者它是另外的东西,与上述两个无关?如果加载程序规范说明了import()
在不同环境中的行为,那么这与浏览器加载
使用的模块的方式有何关系?根据模块加载是由动态导入操作员还是由
操作,是否有两个关于模块加载工作方式的规范?使用
和类型=模块
这完全不是动态的import()
相关:
浏览器将内联或外部脚本视为ECMAScript
模块
从“/utils.mjs”导入{addTextToBody};
addTextToBody('模块非常酷');
参考:
动态导入()
使用静态导入,需要下载整个模块图
并在主代码运行之前执行。有时候,你不想
预先加载模块,但仅在需要时按需加载
-例如,当用户单击链接或按钮时。这改善了
初始加载时间性能。动态导入()使
(异步()=>{
常量moduleSpecifier='./lib.mjs';
const{repeat,shout}=等待导入(moduleSpecifier);
重复“你好”;
// → '你好,你好
shout(“动态导入操作”);
// → '动态导入正在运行
})();
参考:你基本上是正确的。ECMAScript标准没有指定如何解析模块名称:由执行环境来定义。这是第一次明确规定在;后来的规范包含类似的语言 在浏览器中,
import
语句中的模块引用将被视为相对URI并直接加载,假设它们以/
、/
或开头(这是为了保持前向兼容性)。此行为在()中指定
标记中包含(或引用)的脚本作为模块进行解析,并在解析整个文档标记时执行。与正常的
没有太大区别,只是导入
和导出
语句现在可用<代码>
也在HTML规范()中描述
import()
伪函数返回解析为指定为其操作数的模块的承诺。模块名称的解析方式与import
语句中的解析方式完全相同。在撰写本文时,它尚未标准化,但有望成为ECMA-262第11版(ECMAScript 2020)的一部分。您可以阅读或查看
这是一个废弃的规范,也涵盖了动态导入,还包含了更高级的功能,如即时翻译外国脚本或为“裸”模块名称赋予含义(如上所述,这些模块名称目前不可用)。它只是作为一个不完整的规范存在,据我所知,它从未真正实现过。可能还想提及
<script type="module">
import {addTextToBody} from './utils.mjs';
addTextToBody('Modules are pretty cool.');
</script>
<script type="module">
(async () => {
const moduleSpecifier = './lib.mjs';
const {repeat, shout} = await import(moduleSpecifier);
repeat('hello');
// → 'hello hello'
shout('Dynamic import in action');
// → 'DYNAMIC IMPORT IN ACTION!'
})();
</script>