簡體   English   中英

require()的順序似乎會影響模塊

[英]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.jsmqtt.js之間具有循環依賴關系。 閱讀require周期上的node.js文檔以了解詳細信息,但是這種情況的正確解決方案通常是完全刪除循環依賴項。 這表明您的設計耦合還不太正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM