gpt4 book ai didi

javascript - `Object.defineProperty(exports, "__esModule", { value : ! 0 })` 的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 23:22:50 36 4
gpt4 key购买 nike

我读了minimized tensorflow.js file用于理解模块结构。 Tensorflow.js是用 typescript 写的,上面的文件(链接)可能是转译的结果。

无论如何,我理解用 编写的这个模块国际经济论坛 的模式UMD 模块格式。但是,在工厂功能结束时,Object.defineProperty(exports, "__esModule", { value: !0 })存在。我知道它的语法 意义。但我不知道这段代码的目的。据我搜索,这段代码似乎将模块标记为 ES模块 .但这对我来说还不够清楚。所以,一些问题随之而来。

  • 此代码似乎是可移动的。真的吗?
  • 有使用此属性的案例吗?
  • 最佳答案

    它有助于正确导入 CommonJS/AMD/UMD 模块格式的默认导出。

    CommonJS/AMD/UMD 模块的默认导入(即 import d from "foo")等价于

    const d = require("foo").default

    但是当今可用的大多数 CommonJS/AMD/UMD 模块都没有默认导出,这使得这种导入模式实际上无法用于导入非 ES 模块
    (即 CommonJS/AMD/UMD)。
    例如
    import fs from "fs" 

    或者
    import express from "express" 

    不允许。

    为了允许 CommonJS/AMD/UMD 中的默认导入(例如 import fs from "fs"),typescript 编译器添加了 __esModule 标志并在转译代码中检查它(从 ES6 到 CommonJS)。它使用 __importDefault 辅助函数(检查 __esModule 标志)导入默认导出。
    var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
    }
    exports.__esModule = true;
    var bar_1 = __importDefault(require("bar"));

    关于javascript - `Object.defineProperty(exports, "__esModule", { value : ! 0 })` 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50943704/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com