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

标签 javascript node.js node-modules

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

我有两个类文件。

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/

相关文章:

javascript - 无法以管理员身份从后端对 cognito 进行身份验证

javascript - MySQL NodeJS 错误 : Cannot enqueue Query after invoking quit using transactions

javascript - 有没有办法在用户登录的情况下仅播放 HTML5 视频?

javascript - Javascript 可以用来检测重定向的图像 SRC(在任何流行的浏览器中)吗?

JavaScript,检查嵌套对象属性是否为 null/undefined 的优雅方式

node.js - 抓取 Nodejs

node-modules - 我如何直接将 'node_modules' 与 'yarn berry' 一起使用

javascript - 如何根据一个(字符串和数字)对三个(更多)数组进行排序

Javascript 遍历数组 10 次

javascript - 当我将路由放入 Controller 时,我的控制台出现错误