我正准备通过babel使用ES6模块导入/导出,但在article中遇到了这个令人困惑的声明。
它声明:
ES6的
import
和export
结合require()
方法的强大功能使我们可以自由地将所有客户端代码组织到模块中,同时编写代码使用新版JavaScript的所有功能。
这使得它听起来像ES6的系统,require()
有两个不同的目的,从而使这个babel/browserify
方法成为最好的方法。我的理解是他们都做了同样的事情,只是有点不同。任何人都可以帮忙解释一下吗?
答案 0 :(得分:9)
这种说法是矛盾的。如果你进入ES6 / ES7,你不想使用 CommonJS -style require
,但你总是希望使用import
异步加载模块
事实上,ES6 / ES7采用编程方式导入模块:System.import(...)
,但loader specification仍在讨论中......
在获得推荐状态之前,有一个polyfill(并且超过这个......):SystemJS。
从现在开始,我会避免使用任何其他模块加载语法,因为您的代码在几年内可以在标准Web浏览器中完全执行,几乎没有任何修改。
为什么我们需要来自ES6的System.import(...) 有ES6导入/导出模块加载功能?阿伦他们 执行相同的任务?
import
语句只能位于代码文件的顶部。有时您根据执行某种逻辑知道要加载哪些文件,import
语法不支持条件。
例如,我们假设您有一个需要插件的应用程序,而某些选项有一个名为loadPlugins
的标记,可以是true
或false
。因此,如果应用程序需要加载它们,您将要加载它们:
if(options.loadPlugins) {
Promise.all(
options.plugins.map(plugin => System.import(plugin.path))
).then(() => {
// Do stuff when all plugins have been already loaded!
});
}