gpt4 book ai didi

javascript - nodejs 中模块 require 的奇怪行为

转载 作者:搜寻专家 更新时间:2023-10-31 23:50:09 26 4
gpt4 key购买 nike

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

我有两个类文件。

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。

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 - nodejs 中模块 require 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com