为什么 require() 在交互式 shell 中返回 `{}`?

Why is require() returning `{}` in the interactive shell?

在终端中,我导航到包含文件 WordManager.js 的目录。从那里,我输入 node 进入交互式 shell,然后输入 require("./WordManager.js")。结果是{}WordManager.js的内容是

class WordManager
{
    // ...
}

我在网上发现了关于我应该如何导出的相互矛盾的信息,但我已经尝试了所有可能的方法,但没有任何效果。我试过exports.WordManager = class WordManager { ... },我试过module.exports.WordManager,我试过export default...

如何获得我正在寻找的行为 - 从交互式 shell 访问 WordManager class?

使用 Node 时,您必须声明模块的导出。

例如,在您的文件中,为了导出 WordManager,您需要将其分配给 module.exports:

class WordManager {
    // ...
}

module.exports = WordManager

require() 将 return 来自所需模块的 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

希望对您有所帮助。