【问题标题】:ES6 dynamic Import() vs AMD require()ES6 动态 Import() 与 AMD require()
【发布时间】:2019-04-07 15:50:25
【问题描述】:

有什么区别:

  • ES6+技术中的动态import()

  • require() 在 AMD 技术中(requireJS 库)?

【问题讨论】:

标签: javascript ecmascript-6 requirejs amd


【解决方案1】:

存在一些差异,但 import() 可以被视为旧版 AMD 库 的官方实现,例如 require.js。此外,它带来了一种现代方法。

传统 AMD 的不言而喻的特点是它除了 import 表达式之外还带有模块定义。这意味着您可以定义一个可以在项目的任何地方异步导入的模块。

如果您没有像 BABEL 这样的转译器来为您的项目填充 EcmaScript 提案,或者如果您使用旧代码库并需要 AMD 解决方案来提高性能,考虑使用一些 AMD 库而不是动态导入可以成为更好的选择。

【讨论】:

    【解决方案2】:

    有一些区别:

    require() 是同步的,import() 是异步的(返回一个 Promise)。

    import 是 ECMA 规范中定义的关键字,require() 只是某个库定义的函数。

    您可以在 NodeJS 中而不是在浏览器中“本地”使用 require(),并且为所有 JavaScript 引擎指定了 import()

    现在,如果您使用构建管道(例如 Webpack),它们实际上会做不同的事情:

    require() 会将所需的代码捆绑到一个包中,就像 import stuff 那样,而 import() 在运行时动态加载模块,就像 require.ensure 那样 (doc)

    【讨论】:

    • 鉴于这个问题专门针对 AMD 和 requireJS, require()import() 都是异步的。
    • 特别提到AMD,意思是异步模块定义不是commonjs require().
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2014-02-14
    • 2017-05-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多