`Object.defineProperty(exports,'__esModule',{value:true})`vs`exports .__ esModule = true`

时间:2019-11-16 17:21:33

标签: javascript ecmascript-6 es6-modules umd

我认为这是

Object.defineProperty(exports, '__esModule', { value: true })

应给出与此相同的结果:

exports.__esModule = true

但是我见过的所有UMD捆绑生成器都使用了第一个选项。有原因吗?

1 个答案:

答案 0 :(得分:2)

Object.defineProperty()具有与默认分配属性不同的默认值。具体来说,如果您未指定以下属性,则所有属性均默认为false

configurable
enumerable
writable

因此,Object.defineProperty(exports, '__esModule', { value: true })将具有相同的值,但将不可配置,不可枚举或可写,而exports.__esModule = true将具有所有这些属性默认为true

您可以在Object.definePropert() here on MDN上了解有关此详细程度的信息。

  

但是我见过的所有UMD捆绑生成器都使用了第一个选项。有原因吗?

大概,这些工具的设计者希望配置该属性,以便无法对其进行更改(可写),删除(可配置)或枚举。