【问题标题】:How to disable TypeScript Object.defineProperty(exports, "__esModule", { value: true })?如何禁用 TypeScript Object.defineProperty(exports, "__esModule", { value: true })?
【发布时间】:2017-07-05 12:06:31
【问题描述】:

ts 编译器在每个文件中发出这一行:

Object.defineProperty(exports, "__esModule", { value: true });

但是我的代码是在 Nodejs 上运行的,我不是在写 libaray,所以我认为这行对我来说是不必要的。我怎样才能禁用它? 我的编译器选项是:

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "allowJs": true,
        "sourceMap": true,
        "outDir": "build",
        "moduleResolution": "Node",
        "lib": ["es6"]
    }
}

比如编译这个ts文件:

function add(a: number, b: number): number {
    return a + b
}

export { add }

我明白了:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function add(a, b) {
    return a + b;
}
exports.add = add;
//# sourceMappingURL=App.js.map

如何删除第二行?

【问题讨论】:

  • 没有必要。它用于检查如何导入包(即导入默认导出)。
  • @AndrewLi 那么检查是由 Node.js 完成的吗?
  • 嗯,不。它适用于 ES6 模块。当您在 ES2015 中导入一个模块,并且该代码被转译为 ES5 时,导入者必须检查该模块是否为 ES6 模块并相应地导入。
  • @AndrewLi 知道了:) 谢谢

标签: node.js typescript ecmascript-6


【解决方案1】:

但是我的代码是在 Nodejs 上运行的,我不是在写 libaray,所以我认为这行对我来说是不必要的。如何禁用它

它工作正常。所以不要删除它。把它想象成"use strict"。这不是必要的,但它很好。

它的存在是为了允许转译器(typescript / babel / 其他未来的)之间的互操作。

【讨论】:

猜你喜欢
  • 2017-08-07
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2023-03-16
相关资源
最近更新 更多