2016-05-17 86 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

回答