JavaScript-Node.js中模块要求的怪异行为

前端之家收集整理的这篇文章主要介绍了JavaScript-Node.js中模块要求的怪异行为 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

我有两个班级文件.

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.

尝试使用codesandBox.

Edit node module misbehavior

最佳答案
似乎存在循环依赖关系.理想情况下,模块不应依赖于依赖于该模块的模块.

由于您的Business.js模块依赖于Street.js模块,而Street.js模块依赖于Business.js模块(称为循环依赖),您将获得这种“怪异的行为”.

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

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

class Business {}

module.exports = {
  Street,Business
}; 

尝试使用codesandBox.

Edit node module misbehavior

猜你在找的JavaScript相关文章