2015-05-04 70 views
10

我该如何才能延迟加载 ES6模块?通过懒惰,我的意思是我不想实际加载模块,不需要。例如,这里的东西我可以RequireJS做到:懒惰模块加载如何在ES6中工作

function someEventHandler() { 
    var SomeModule = require('some-module'), 
     module = new SomeModule(); 
    // ... 
} 

东西沿着相同的路线不会出现使用ES6进口成为可能:

// Doesn't appear to be valid... 
function someEventHandler() { 
    import SomeModule from 'some-module'; 
    var module = new SomeModule(); 
    // ... 
} 

有没有可行的技术,只拉需要时使用ES6模块进行依赖性?或者是唯一的路径来跟踪完整的依赖关系图并预先获取所有内容?

+0

你必须使用系统加载器API。请参阅[在Ember CLI中导入动态模块](http://stackoverflow.com/q/26728035/218196) –

+0

不,不可能使用'import'语法。但是,您可以使用“require”功能的异步(!)等效功能。 – Bergi

回答

15

import语句只能在文件的最顶端工作,并且会加载所有文件。这主要是为了避免循环依赖的潜在问题。

还有一种方法可以进行异步加载;但是规范似乎还没有最终确定。该ES6 module loader填充工具包采用了一种名为System.import(moduleName)方法返回一个承诺,最终的规范很可能类似于:

function someEventHandler() { 
    System.import('some-module').then((SomeModule) => { 
     var module = new SomeModule(); 
     // ... 
    }) 
} 
+0

此语法准备就绪的任何更新? – fegemo

+5

现在有一个关于JavaScript动态导入的建议:https://github.com/tc39/proposal-dynamic-import。它在全局范围内指定一个简单的'import()'函数。 WebPack 2支持这个罪恶版本v2.1.0-beta.28。 – jbandi