【问题标题】:weird behavior of module require in nodejsnodejs中模块要求的奇怪行为
【发布时间】:2019-03-14 13:19:33
【问题描述】:

很难解释,所以我将重现代码。

我有两个类文件。

Business.js

const Street = require("./Street");

module.exports = class Business {};

Street.js

const Business = require("./Business");

module.exports = class Street {
  constructor() {
    console.log(Business);
  }
};

和 index.js 文件

const Street = require("./Street");

const street = new Street();

当我运行 index.js(节点 ./index.js)时,它会按预期记录 [Function: Business]

但是当我在 index.js 文件中需要Business.js 时,记录消息更改,它记录空对象{}

index.js

const Business = require("./Business");
const Street = require("./Street");

const street = new Street();

我不明白为什么 Street.js 文件中的 index.js 效果日志消息中需要 Business。

试试codeandbox。

【问题讨论】:

    标签: javascript node.js node-modules


    【解决方案1】:

    似乎存在循环依赖。理想情况下,模块不应依赖于依赖于该模块的模块。

    由于您的 Business.js 模块依赖于 Street.js 模块,而 Street.js 模块依赖于 Business.js 模块(称为循环依赖),因此您会遇到这种“奇怪的行为”。

    任何避免循环依赖的重组都可以,例如将两个类移动到同一个文件(只是一个建议,您可能希望使用另一种方式作为您的用例和编码实践)。

    class Street {
      constructor() {
        console.log(Business);
      }
    }
    
    class Business {}
    
    module.exports = {
      Street,
      Business
    }; 
    

    试试codeandbox。

    【讨论】:

    • 谢谢,现在我知道了这个术语(循环依赖),我可以用谷歌搜索它,反正我的用例是 Street 而 Business 是一个有关系的模型,这意味着它们相互依赖,我怎样才能避免循环依赖,文章的任何链接都是赞赏
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多