Почему require () возвращает `{}` в интерактивной оболочке? - PullRequest
0 голосов
/ 25 августа 2018

В терминале я перехожу в каталог, содержащий файл WordManager.js. Оттуда я набираю node, чтобы войти в интерактивную оболочку, и набираю require("./WordManager.js"). Результат {}. Содержимое WordManager.js составляет

class WordManager
{
    // ...
}

Я нашел противоречивую информацию в Интернете о том, как именно я должен делать экспорт, но я попробовал все возможные способы, и ничего не работает. Я пробовал exports.WordManager = class WordManager { ... }, я пробовал module.exports.WordManager, я пробовал export default ...

Как получить искомое поведение - доступ к классу WordManager из интерактивной оболочки?

1 Ответ

0 голосов
/ 25 августа 2018

При работе с Node вы должны объявить экспорт модуля.

Например, в вашем файле для экспорта WordManager вы захотите присвоить его module.exports:

class WordManager {
    // ...
}

module.exports = WordManager

require() вернет значение module.exports из требуемого модуля. Обратите внимание, что если вы хотите экспортировать несколько значений, вы можете сделать это, прикрепив их как свойства к module.exports:

class WordManager {
    // ...
}

class SpellChecker {
    // ...
}

module.exports.WordManager = WordManager
module.exports.SpellChecker = SpellChecker

Это может быть немного многословно при экспорте нескольких экспортов, поэтому module.exports имеет псевдоним как exports в области видимости модуля, поэтому вы можете сделать следующее:

exports.WordManager = WordManager
exports.SpellChecker = SpellChecker

Слово предупреждения, exports может быть перезаписано, но не будет обновлять значение или module.exports, поэтому следующее не будет работать:

// Does not work
exports = WordManager

Надеюсь, это поможет.

...