Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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 既然ES2015 dynamic import()得到广泛支持,那么ES2015静态导入的优势是什么?_Javascript_Ecmascript 6_Import_Es6 Modules - Fatal编程技术网

Javascript 既然ES2015 dynamic import()得到广泛支持,那么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

我越来越多地使用ES2015模块

通常,我倾向于通过动态
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()
异步
等待
等)所以我绝对接受你的开场白。