有什么区别
module.exports = UpgradeService;
和
module.exports = { UpgradeService };
当我使用第二个时,我无法在VS代码中窥视它的定义。为什么会这样,它们之间有什么异同?
答案 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').UpradeService
用destructuring做const { 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'
,而不必更改任何现有文件。