`Object.defineProperty(exports, '__esModule', { value: true })` 与 `exports.__esModule = true`
`Object.defineProperty(exports, '__esModule', { value: true })` vs `exports.__esModule = true`
我认为这是:
Object.defineProperty(exports, '__esModule', { value: true })
应该给出与此相同的结果:
exports.__esModule = true
但我见过的所有 UMD 包生成器都使用了第一个选项。有什么原因吗?
Object.defineProperty()
与通常分配 属性 有不同的默认值。具体来说,如果不指定,以下属性都默认为false
:
configurable
enumerable
writable
因此,Object.defineProperty(exports, '__esModule', { value: true })
将具有相同的值,但不可配置、不可枚举或可写,而 exports.__esModule = true
将所有这些属性默认为 true
。
您可以在 Object.definePropert()
here on MDN 上阅读有关此级别的详细信息。
But all UMD bundle generators I've seen have used the first option. Is there a reason?
据推测,这些工具的设计者希望 属性 配置为无法更改(可写)或删除(可配置)或枚举。
我认为这是:
Object.defineProperty(exports, '__esModule', { value: true })
应该给出与此相同的结果:
exports.__esModule = true
但我见过的所有 UMD 包生成器都使用了第一个选项。有什么原因吗?
Object.defineProperty()
与通常分配 属性 有不同的默认值。具体来说,如果不指定,以下属性都默认为false
:
configurable
enumerable
writable
因此,Object.defineProperty(exports, '__esModule', { value: true })
将具有相同的值,但不可配置、不可枚举或可写,而 exports.__esModule = true
将所有这些属性默认为 true
。
您可以在 Object.definePropert()
here on MDN 上阅读有关此级别的详细信息。
But all UMD bundle generators I've seen have used the first option. Is there a reason?
据推测,这些工具的设计者希望 属性 配置为无法更改(可写)或删除(可配置)或枚举。