Javascript 既然ES2015 dynamic import()得到广泛支持,那么ES2015静态导入的优势是什么?
我越来越多地使用ES2015模块 通常,我倾向于通过动态Javascript 既然ES2015 dynamic import()得到广泛支持,那么ES2015静态导入的优势是什么?,javascript,ecmascript-6,import,es6-modules,Javascript,Ecmascript 6,Import,Es6 Modules,我越来越多地使用ES2015模块 通常,我倾向于通过动态import()语法加载模块,使用以下模式的变体: import(moduleURL.js).then(importedModule => myFunction(importedModule)); 在2020年初,考虑到import()现在几乎具有通用浏览器支持,这似乎是一种没有陷阱的方法 见: 但这是否也意味着静态导入语句,如: 从'moduleURL.js'导入*为myModule 从'moduleURL.js'导入{myNa
import()
语法加载模块,使用以下模式的变体:
import(moduleURL.js).then(importedModule => myFunction(importedModule));
在2020年初,考虑到import()
现在几乎具有通用浏览器支持,这似乎是一种没有陷阱的方法
见:
但这是否也意味着静态导入语句,如:
从'moduleURL.js'导入*为myModule
从'moduleURL.js'导入{myNamedExport}
从'moduleURL.js'导入myDefaultExport
现在已经被有效地(尽管不是官方的)否决了吗
如果不是——我猜它们实际上并没有被弃用——静态import
语句与动态import()
相比有哪些具体的技术优势
在什么情况下,我最好使用前者而不是后者
进一步阅读:
- 静态
import
语句:
- 动态
导入()
:
- 莱昂纳多·布鲁诺·利马
我为什么要问ES2015静态导入的优点?
这不仅仅是无聊的好奇心
我希望在我的工作流程中实现某些流程的标准化,我对import()
非常满意
但是,在我到处采用import()
之前,我想确保我没有错过静态import
语句提供的特定功能或优势,而是缺少它们更年轻、更动态的对应语句。使用同步代码比使用异步代码更容易。虽然您可以在任何地方使用动态导入,但这需要在任何地方放置。然后放置s(或支持后的顶级wait
s)。仅此一项就将导致大量恼人的语法噪音。当您必须同时导入多个模块时,情况会变得更糟:
Promise.all([
import('foo'),
import('bar')
])
.then(([foo, bar]) => {
// do stuff with foo and bar
});
相比
import foo from 'foo';
import bar from 'bar';
更少的语法噪音意味着更少的bug表面积
还要注意的是,虽然动态导入得到广泛支持,但它并没有得到普遍支持。一小部分用户仍然使用old Edge、FF 56或更低版本、Chrome 62或更低版本、甚至IE11。有些人可能会认为,最好提供基本上适用于所有人的脚本,而不是只适用于绝大多数人。(这就是巴别塔在今天仍然如此普遍使用的原因之一)Wow。我不知道你能做导入(…)
。我认为从“这里”导入import{something}的常规方法代码>绝对不会去任何地方<代码>导入(…)
似乎更适合只需要一个特定的导入
就可以快速完成。而从'here'导入{something}
意味着您将在代码中多次使用该导入。我个人不认为我会使用导入(…)
,但知道它的存在很酷。谢谢你,@CertainPerformance。总之(我不想在这里轻率地说),静态import
语句的优点是1)更简单的语法和2)更广泛的浏览器支持。是的,就是这样。另一件事是,能够立即静态分析需要导入的所有内容可以使某些工具变得更容易——例如,如果模块与Webpack或某个构建系统一起编译,而不是与本机ES6模块一起编译。我在这方面没有太多经验,但我知道动态导入会使确定正确的配置变得更加困难。我已经进行了更多的实验,并且我确实体验到必须添加异步标记(.then()
,异步
,等待
等)所以我绝对接受你的开场白。