2015-05-04 68 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