简单的JavaScript ES6与require()导入

时间:2016-08-20 13:06:47

标签: javascript ecmascript-6 browserify babeljs javascript-import

我正准备通过babel使用ES6模块导入/导出,但在article中遇到了这个令人困惑的声明。

它声明:

  

ES6的importexport结合require()方法的强大功能使我们可以自由地将所有客户端代码组织到模块中,同时编写代码使用新版JavaScript的所有功能。

这使得它听起来像ES6的系统,require()有两个不同的目的,从而使这个babel/browserify方法成为最好的方法。我的理解是他们都做了同样的事情,只是有点不同。任何人都可以帮忙解释一下吗?

1 个答案:

答案 0 :(得分:9)

这种说法是矛盾的。如果你进入ES6 / ES7,你不想使用 CommonJS -style require,但你总是希望使用import异步加载模块

事实上,ES6 / ES7采用编程方式导入模块:System.import(...),但loader specification仍在讨论中......

在获得推荐状态之前,有一个polyfill(并且超过这个......):SystemJS

从现在开始,我会避免使用任何其他模块加载语法,因为您的代码在几年内可以在标准Web浏览器中完全执行,几乎没有任何修改。

OP在一些评论中问道......

  

为什么我们需要来自ES6的System.import(...)   有ES6导入/导出模块加载功能?阿伦他们   执行相同的任务?

import语句只能位于代码文件的顶部。有时您根据执行某种逻辑知道要加载哪些文件,import语法不支持条件。

例如,我们假设您有一个需要插件的应用程序,而某些选项有一个名为loadPlugins的标记,可以是truefalse。因此,如果应用程序需要加载它们,您将要加载它们:

if(options.loadPlugins) {
   Promise.all(
      options.plugins.map(plugin => System.import(plugin.path))
   ).then(() => {
      // Do stuff when all plugins have been already loaded!
   });
}