这种说法是矛盾的。如果您进入 ES6/ES7,您将不想使用CommonJS样式require
,但您总是希望使用import
.
其实 ES6/ES7 有一种程序化的方式导入模块:System.import(...)
,但是loader 规范还在讨论中……
在它获得推荐状态之前,有一个 polyfill(而且不止于此......):SystemJS。
从现在开始,我将避免使用任何其他模块加载语法,因为您的代码将在几年后在标准 Web 浏览器中完美执行,只需少量修改。
OP在一些评论中问...
当我们拥有 ES6 导入/导出模块加载功能时,为什么 JS 模块需要来自 ES6 的 System.import(...)?他们不是在执行相同的任务吗?
import
语句只能位于代码文件的顶部。有时您可以根据执行某种逻辑知道要加载哪些文件,而import
语法不支持条件。
例如,假设您有一个需要plugins的应用程序,并且某些选项有一个名为loadPlugins
which can be true
or的标志false
。因此,如果应用程序想要加载它们,您将需要加载它们:
if(options.loadPlugins) {
Promise.all(
options.plugins.map(plugin => System.import(plugin.path))
).then(() => {
// Do stuff when all plugins have been already loaded!
});
}