[英]Ordering of require() seems to affect modules
我正在編寫一個非常基本的Node應用程序,其中包含三個組件:index.js,mqtt.js,slack.js。 mqtt和slack模塊都使用module.exports公開了一些方法。 但是,我只能向一個方向公開文件。 代碼示例:
index.js:
var slack = require('./slack');
var mqtt = require('./mqtt');
var client;
mqtt.connectMQTT(client);
slack.startServer();
slack.js:
var mqtt = require('./mqtt');
module.exports = {
startServer: function() { //blahblah },
postToSlack: function() { //blahblah }
};
mqtt.js:
var slack = require('./slack');
module.exports = {
connectClient: function() { //blahblah },
handleMessage: function() { slack.postToSlack(); }
};
現在,當我嘗試從mqtt.js調用postToSlack()時,Node給了我:TypeError:對象#沒有方法'postToSlack'
但是,當我在index.js中交換兩個require()的行位置時,現在可以從mqtt調用方法,而不能從slack調用方法。 該錯誤已反映出來。 我可以從index.js調用方法。
我應該使用回調來推遲運行任何代碼,直到成功加載所有模塊嗎? 為什么完全獨立文件中的require()順序會影響公開方法?
您在slack.js
和mqtt.js
之間具有循環依賴關系。 閱讀require周期上的node.js文檔以了解詳細信息,但是這種情況的正確解決方案通常是完全刪除循環依賴項。 這表明您的設計耦合還不太正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.