简单JavaScript ES6 vs require()导入

简单JavaScript ES6 vs require()导入,javascript,ecmascript-6,browserify,babeljs,javascript-import,Javascript,Ecmascript 6,Browserify,Babeljs,Javascript Import,我正准备通过babel使用ES6模块导入/导出,但在本文中遇到了这一令人困惑的陈述 它说: ES6的import和export功能与require()方法相结合,使我们可以自由地将所有客户端代码组织到模块中,同时使用新版JavaScript的所有功能编写代码 这使得它听起来像ES6的系统,require()有两个不同的用途,从而使这个babel/browserify方法成为最佳选择。我的理解是,他们都做同样的事情,只是有点不同。有人能解释一下吗?这种说法自相矛盾。如果您进入ES6/ES7,您将不

我正准备通过babel使用ES6模块导入/导出,但在本文中遇到了这一令人困惑的陈述

它说:

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


这使得它听起来像ES6的系统,
require()
有两个不同的用途,从而使这个
babel/browserify
方法成为最佳选择。我的理解是,他们都做同样的事情,只是有点不同。有人能解释一下吗?

这种说法自相矛盾。如果您进入ES6/ES7,您将不希望使用CommonJS样式
require
,但您始终希望使用
import
异步加载模块

事实上,ES6/ES7有一种导入模块的编程方式:
System.import(…)
,但仍在讨论

在获得推荐状态之前,会有一个polyfill(以及更多…):

从现在起,我将避免使用任何其他模块加载语法,因为您的代码在几年后将在标准Web浏览器中完全可执行,只需很少修改

OP在一些评论中问道。。。 当我们需要时,为什么js模块需要从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!
   });
}

非常感谢。当我们拥有ES6
导入/导出
模块加载功能时,为什么js模块需要从ES6导入(…)?他们不是在执行同样的任务吗?@qarthand所以我将在我自己的回答中作为更新来回答这个问题;)啊,我明白了。非常感谢。您是否使用特定插件中的代码?或者
Promise
是一个js关键字?我不理解代码,但我理解
import
vs
System.import
的概念@qarthandso噢<代码>承诺已经在现代浏览器中可用。它是这个标准的实现:。这是一种实现异步编程的优雅方式
System.import
返回一个承诺,您可以附加一个
处理程序,然后在操作完成后执行操作。@qarthandso不客气!现在你有理由利用业余时间了