为了理解模块结构,我阅读了最小化tensorflow.js文件。Tensorflow.js是用打字本写的,上面的文件(链接)可能是转写的结果。
无论如何,我理解这个模块是用IIEF模式为UMD模块格式编写的。但是,在工厂函数的末尾,存在Object.defineProperty(exports, "__esModule", { value: !0 })。我知道语法的意思。但我不知道这个代码的目的。据我搜索,这段代码似乎将模块标记为ES Module。但对我来说还不够清楚。下面是一些问题。
发布于 2019-04-15 11:01:15
它有助于正确导入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"));发布于 2022-03-29 20:02:58
马克西姆回答得很好。
在打字稿操场中打开/关闭https://www.typescriptlang.org/tsconfig#esModuleInterop标志也会有帮助。
关闭
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const foo_1 = require("foo");
console.log(foo_1.default);在……上面
"use strict";
+ var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
Object.defineProperty(exports, "__esModule", { value: true });
- const foo_1 = require("foo");
+ const foo_1 = __importDefault(require("foo"));
console.log(foo_1.default);https://stackoverflow.com/questions/50943704
复制相似问题