странное поведение модуля require в nodejs - PullRequest
3 голосов
/ 13 марта 2019

Трудно объяснить, поэтому я воспроизведу код.

У меня есть два файла классов.

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], как и ожидалось,

, но когда мне требуется Business.js в файле index.js, как показано ниже, сообщение об изменении журнала регистрирует пустой объект {}.

index.js

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

const street = new Street();

Я не понимаю, зачем Бизнесу в index.js сообщать о лог-эффекте в файле Street.js .

попробуйте коды и окна.

Edit node module misbehavior

1 Ответ

2 голосов
/ 13 марта 2019

Кажется, что есть круговая зависимость. В идеале модуль не должен зависеть от модуля, который зависит от этого модуля.

Поскольку ваш модуль Business.js зависит от модуля Street.js, а модуль Street.js зависит от модуля Business.js (который называется циклической зависимостью), вы получаете «странное поведение».

Любая реструктуризация, которая позволяет избежать циклической зависимости, будет в порядке, например, перемещение обоих классов в один и тот же файл (просто предложение, вы можете использовать другой способ в качестве примера использования и практики кодирования).

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

class Business {}

module.exports = {
  Street,
  Business
}; 

попробуйте коды и ящик.

Edit node module misbehavior

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...