代码之家  ›  专栏  ›  技术社区  ›  Rounin

既然ES2015 dynamic import()得到了广泛支持,那么ES2015静态导入有哪些优势?

  •  1
  • Rounin  · 技术社区  · 5 年前

    ES2015模块 越来越多。

    通常,我倾向于通过动态 import() 语法,使用以下模式的变体:

    import(moduleURL.js).then(importedModule => myFunction(importedModule));
    

    在2020年初,考虑到 导入() 现在有了近乎通用的浏览器支持。

    见: 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'

    现在有效地(尽管不是官方的)被否决了?

    猜测 具体技术优势 静态的 进口 动态语句 ?

    在什么情况下,我最好使用前者而不是后者?



    为什么我要问ES2015静态 ?

    这不仅仅是无聊的好奇心。

    导入()

    但在我领养之前 导入()

    0 回复  |  直到 5 年前
        1
  •  2
  •   CertainPerformance    5 年前

    使用同步代码比异步代码更容易。而你 在任何地方都使用动态导入,这需要将 .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表面积。

    还要注意,虽然动态导入得到了广泛支持,但它并不是普遍支持的。相对较小的一部分用户仍然处于老边缘,或在FF 56或以下,或在Chrome 62及以下,甚至在IE11上。有些人可能认为,最好提供基本上对每个人都有效的脚本,而不仅仅是绝大多数人。(这就是为什么巴别塔至今仍被广泛使用的原因之一)