Взаимозависимые включения в node.js приводят к пустому объекту - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть два файла, которые объявляют класс, оба с static функциями:

foo.js:

const bar = require('./bar');

console.log('bar in foo: ');
console.log(bar);

class foo {
  static _(test) {
    return 'foo_' + test + bar._(test);
  }

  static bar() {
    return 'bar';
  }
}

module.exports = foo;

bar.js:

const foo = require('./foo');

console.log('foo in bar:');
console.log(foo);

class bar {
  static _(test) {
    return foo.bar(test);
  }
}

module.exports = bar;

В VS Code код завершения работает в обоих файлах, чтобы получить статический метод другого файла.

Но когда я пытаюсь его выполнить:

const foo = require('./foo');
foo._('test');

Я вижу, что рекурсивныйrequire не работает так, как я думал:

foo in bar:
{}
bar in foo:
[Function: bar]
bar.js:8
        return foo.bar(test);
                   ^

TypeError: foo.bar is not a function

Я знаю, * class в JS - это синтаксический сахар вокруг функций, но я все еще удивлен, что интерпретатор теряет static членов.

Кто-нибудь может объяснить работу require в этом случае?И почему это приводит к пустому объекту?

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