现在ES2015动态import()被广泛支持,那么ES2015静态import有什么优势呢?
Now that ES2015 dynamic import() is widely supported, what are the advantages of ES2015 static import?
我越来越多地使用 ES2015 模块。
通常情况下,我倾向于通过动态 import()
语法加载模块,使用以下模式的变体:
import(moduleURL.js).then(importedModule => myFunction(importedModule));
在 2020 年初,这似乎是一种没有陷阱的方法,因为 import()
现在具有近乎普遍的浏览器支持。
参见:https://caniuse.com/#feat=es6-module-dynamic-import
但这是否也意味着像这样的静态 import
语句:
import * as myModule from 'moduleURL.js'
import { myNamedExport } from 'moduleURL.js'
import myDefaultExport from 'moduleURL.js'
现在实际上(虽然不是正式)弃用了?
如果不是——我的猜测是它们没有被有效弃用——静态[=13]的具体技术优势是什么=] 动态语句 import()
?
在什么情况下我最好使用前者而不是后者?
进一步阅读:
静态import
语句:
动态import()
:
- Dynamically importing ES modules with import() 莱昂纳多·布鲁诺·利马
为什么我要问ES2015 static的优点import
?
这不仅仅是无聊的好奇心。
我希望在我的工作流程中标准化某些流程,我对 import()
非常满意。
但在我到处采用 import()
之前,我想确保我没有错过静态 import
语句提供的特定功能或优势,但它们更年轻、更动态对方.
使用同步代码比使用异步代码更容易。虽然您 可以 在任何地方使用动态导入,但这需要在任何地方放置 .then
s(或顶级 await
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 表面积。
另请注意,虽然动态导入得到广泛支持,但并未得到普遍支持。一小部分用户还在老版Edge,或者FF 56以下,或者Chrome62以下,甚至IE11。有些人可能认为最好提供基本上适用于所有人的脚本,而不是只适用于绝大多数人的脚本。 (这也是 Babel 至今仍被如此普遍使用的原因之一)
我越来越多地使用 ES2015 模块。
通常情况下,我倾向于通过动态 import()
语法加载模块,使用以下模式的变体:
import(moduleURL.js).then(importedModule => myFunction(importedModule));
在 2020 年初,这似乎是一种没有陷阱的方法,因为 import()
现在具有近乎普遍的浏览器支持。
参见:https://caniuse.com/#feat=es6-module-dynamic-import
但这是否也意味着像这样的静态 import
语句:
import * as myModule from 'moduleURL.js'
import { myNamedExport } from 'moduleURL.js'
import myDefaultExport from 'moduleURL.js'
现在实际上(虽然不是正式)弃用了?
如果不是——我的猜测是它们没有被有效弃用——静态[=13]的具体技术优势是什么=] 动态语句 import()
?
在什么情况下我最好使用前者而不是后者?
进一步阅读:
静态
import
语句:动态
import()
:- Dynamically importing ES modules with import() 莱昂纳多·布鲁诺·利马
为什么我要问ES2015 static的优点import
?
这不仅仅是无聊的好奇心。
我希望在我的工作流程中标准化某些流程,我对 import()
非常满意。
但在我到处采用 import()
之前,我想确保我没有错过静态 import
语句提供的特定功能或优势,但它们更年轻、更动态对方.
使用同步代码比使用异步代码更容易。虽然您 可以 在任何地方使用动态导入,但这需要在任何地方放置 .then
s(或顶级 await
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 表面积。
另请注意,虽然动态导入得到广泛支持,但并未得到普遍支持。一小部分用户还在老版Edge,或者FF 56以下,或者Chrome62以下,甚至IE11。有些人可能认为最好提供基本上适用于所有人的脚本,而不是只适用于绝大多数人的脚本。 (这也是 Babel 至今仍被如此普遍使用的原因之一)