这很难解释,所以我将重现代码。
我有两个类文件。
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 (node ./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 中的业务影响日志消息。
试试 codesandbox。
最佳答案
似乎存在循环依赖。理想情况下,一个模块不应依赖于另一个依赖该模块的模块。
由于您的 Business.js 模块依赖于 Street.js 模块,而 Street.js 模块又依赖于 Business.js 模块(称为循环依赖),您会遇到这种“奇怪的行为”。
任何避免循环依赖的重组都可以,比如将两个类移动到同一个文件(只是一个建议,您可能希望使用另一种方式作为您的用例和编码实践)。
class Street {
constructor() {
console.log(Business);
}
}
class Business {}
module.exports = {
Street,
Business
};
试试 codesandbox。
关于javascript - nodejs 中模块 require 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137075/