ES6动态导入(Import())与AMD的require()有何区别?

5

动态import()在ES6+技术中和

  • AMD技术(requireJS库)中的require()有什么区别?


3
可能是使用Node.js的require与ES6的import/export有什么区别?的重复问题。 - Constantin Groß
3
@connum 不同意,import()import 之间是有区别的。 - Jonas Wilms
1
动态导入仍然是一个提案,它不是ES6的一部分。 - Bergi
1
它于2017年11月21日在官方V8网站上发布。同时,也可以在MDN网站上正式找到。是的,它是一个标准。 https://v8.dev/features/dynamic-import - oyilmaztekin
2个回答

2

有几个区别:

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

import是ECMA规范中定义的关键字,而require()只是由一些库定义的函数。

你可以在NodeJS中“本地”使用require(),但不能在浏览器中使用,import()则适用于所有JavaScript引擎。

如果你使用构建流程(例如Webpack),它们实际上会执行不同的操作:

require()将所需的代码捆绑成一个包,就像import stuff一样,而import()在运行时动态加载模块,就像require.ensure一样(文档)。


2
考虑到这个问题是关于AMD和requireJS的,因此require()import()都是异步的。 - Félix Saparelli
1
特别提到了 AMD,它代表的是异步模块定义,而不是 commonjs require() - oyilmaztekin

2
有一些区别,但import()可以被视为旧版AMD库(如require.js)的官方实现。同时,它也带来了一种现代化的方法。
传统AMD的显然特征是除了import表达式之外还有模块定义。这意味着您可以定义一个模块,在项目中任何地方都可以异步导入。
如果您的项目中没有像BABEL这样的转译器来填充EcmaScript提案,或者如果您正在处理遗留代码库并需要改善性能的AMD解决方案,那么考虑使用一些AMD库而不是动态import可能是更好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接