为了了解模块结构,我读了minimized tensorflow.js file。 Tensorflow.js用打字稿写成,以上文件(链接)可能是编译结果。
无论如何,我理解此模块是用 IIEF 模式编写的,用于 UMD 模块格式。但是,在工厂功能结束时,Object.defineProperty(exports, "__esModule", { value: !0 })
存在。我知道它的语法含义。但是我不知道这段代码的目的。据我查询,这段代码似乎将该模块标记为 ES Module 。但是对我来说还不够清楚。因此,接下来会出现一些问题。
答案 0 :(得分:2)
它有助于正确导入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),打字稿编译器会添加__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"));