我认为这是
Object.defineProperty(exports, '__esModule', { value: true })
应给出与此相同的结果:
exports.__esModule = true
但是我见过的所有UMD捆绑生成器都使用了第一个选项。有原因吗?
答案 0 :(得分:2)
Object.defineProperty()
具有与默认分配属性不同的默认值。具体来说,如果您未指定以下属性,则所有属性均默认为false
:
configurable
enumerable
writable
因此,Object.defineProperty(exports, '__esModule', { value: true })
将具有相同的值,但将不可配置,不可枚举或可写,而exports.__esModule = true
将具有所有这些属性默认为true
。
您可以在Object.definePropert()
here on MDN上了解有关此详细程度的信息。
但是我见过的所有UMD捆绑生成器都使用了第一个选项。有原因吗?
大概,这些工具的设计者希望配置该属性,以便无法对其进行更改(可写),删除(可配置)或枚举。