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

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

  • 此代码似乎可删除。真的吗
  • 是否有使用此属性的情况?
  • 最佳答案

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

    CommonJS/AMD/UMD模块的默认导入(即从“foo”导入d)等效于

    const d = require("foo").default
    

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

    或者
    import express from "express"
    

    不允许。

    为了允许在CommonJS/AMD/UMD中进行默认导入(例如,从“fs”导入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/

    10-08 22:58