节点中module.exports之间的区别

时间:2018-09-18 11:43:53

标签: javascript node.js

有什么区别
module.exports = UpgradeService;

module.exports = { UpgradeService };

当我使用第二个时,我无法在VS代码中窥视它的定义。为什么会这样,它们之间有什么异同?

2 个答案:

答案 0 :(得分:3)

第一条语句将导出的值设置为UpgradeService。第二条语句将导出的值设置为对象。 { UpgradeService }{ UpgradeService: UpgradeService }的简写,它是一个简单的key:value对!换句话说,它会导出一个只有一个(自己的)键UpgradeService的普通对象。

答案 1 :(得分:1)

请记住,设置module.exports = (something)实际上只是在更改require()模块时获得的内容,并且(something)可以是任何值。您可以设置module.exports = 42,而require()可以返回数字42。

执行module.exports = { UpgradeService }意味着您要将导出设置为 object ,看起来像{"UpgradeService": UpgradeService}。在the ES6 syntax rule之后,其中{x, y}{x: x, y: y}相同。

然后在其他文件中,您不用const UpgradeService = require('blah')const UpradeService = require('blah').UpradeServicedestructuringconst { UpgradeService } = require('blah')

通常,在计划导出多个对象时,将module.exports设置为一个对象(而不是函数或类)。例如,您可能要同时导出UpgradeService和新的Upgrade类。在这种情况下,您将执行module.exports = { UpgradeService, Upgrade }

有些人更喜欢总是 从导出这样的对象开始,因为这样很容易添加新的导出对象。例如,如果将module.exports = 'Apple'更改为module.exports = { fruit: 'Apple', animal: 'Bat' },则必须更改需要该模块的 all 个文件。但是,如果您刚开始使用module.exports = { fruit: 'Apple' },则可以添加animal: 'Bat',而不必更改任何现有文件。