Hyu*_*ang 2 javascript module ecmascript-6
我阅读了最小化的tensorflow.js文件以了解模块结构。Tensorflow.js是用打字稿编写的,以上文件(链接)可能是编译结果。
无论如何,我了解这个模块是用IIEF模式编写的,用于UMD模块格式。但是,在工厂功能结束时,Object.defineProperty(exports, "__esModule", { value: !0 })存在。我知道它的语法含义。但是我不知道这段代码的目的。就我而言,这段代码似乎将模块标记为ES Module。但是对我来说还不够清楚。因此,一些问题随之而来。
它有助于正确导入CommonJS / AMD / UMD模块格式的默认导出。
CommonJS / AMD / UMD模块的默认导入(即从“ foo”导入d)等效于
const d = require("foo").default
Run Code Online (Sandbox Code Playgroud)
但是,当今可用的大多数CommonJS / AMD / UMD模块都没有默认导出,这使得该导入模式实际上无法用于导入非ES模块(即CommonJS / AMD / UMD)。例如
import fs from "fs"
Run Code Online (Sandbox Code Playgroud)
要么
import express from "express"
Run Code Online (Sandbox Code Playgroud)
不允许。
为了允许在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"));
Run Code Online (Sandbox Code Playgroud)
马克西姆给出了一个很好的答案。
使用https://www.typescriptlang.org/tsconfig#esModuleInterop标志打开/关闭来探索Typescript Playground也可能会有所帮助。
离开
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const foo_1 = require("foo");
console.log(foo_1.default);
Run Code Online (Sandbox Code Playgroud)
在
"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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4511 次 |
| 最近记录: |