2016-05-17 80 views
0

爲了簡單起見,假設我有兩個模塊:table.jschart.js。我想用WebPack捆綁它們,但是最終會出現一個錯誤,可能是由於它們彼此依賴。如何捆綁循環依賴模塊?

table.js

var chart = require('./chart'); 
module.exports = (function() { 
    var init = function() { 
     _loadTable(); 
     chart.init(); 
    }; 

    var update = function() { 
     console.log('table updated'); 
    }; 

    return { 
     init: init, 
     update: update 
    } 
})(); 

chart.js

var table = require('./table'); 
module.exports = (function() { 
    var init = function() { 
     _drawChart(); 
     table.update(); // will throw an error: table.update is not a function 
    }; 

    return { 
     init: init 
    } 
})(); 

什麼這裏發生了什麼? 表首先由table.init()加載,然後通過chart.init()加載圖表模塊。圖表被繪製並試圖更新表格作爲回報。

然而,在這一點上chart.js不知道什麼是var table = require('./table')(因爲在那一刻var table = {}),從而table.update()將拋出一個錯誤。

這在模塊管理爲「傳統」(由腳本標記加載並通過全局window對象進行通信)進行管理之前並未發生。

我在想,如果WebPack仍然可以用於像這樣的並行相關模塊?

+0

我不知道webpack,但是如果它遵循節點所做的模塊解析過程,那麼簡單地說,導出的對象上沒有'update'功能。你以前是怎麼做到的? – MinusFour

+0

實際上,我回過頭來看,這一定是WebPack的問題,因爲模塊解析過程不應該有任何問題。您所做的只是導出函數,並且在所有模塊都執行完畢之前您不會調用它們。 – MinusFour

回答