RequireJS模块的TypeScript编译生成行Object.defineProperty(exports,“ __esModule”,{value:true}); 如何摆脱它?

Joh*_*Doe 7 javascript amd requirejs typescript tsc

这是我的tsconfig.json文件的外观:

{
    "compileOnSave": true,
    "compilerOptions": {
        "module": "amd",
        "noImplicitAny": false,
        "removeComments": false,
        "preserveConstEnums": true,
        "strictNullChecks": true,
        "sourceMap": false
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个名为a.ts的打字稿文件,它是一个AMD模块(我正在使用requirejs),如下所示:

export function a() {
    var a = {
        b: 5
    };
    return a;
}
Run Code Online (Sandbox Code Playgroud)

编译后的Javascript文件如下所示:

 define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    function a() {
        var a = {
            b: 5
        };
        return a;
    }
    exports.a = a;
 });
Run Code Online (Sandbox Code Playgroud)

我需要生成的JavaScript文件为:

define(function () {
    "use strict";
    var a = {
        b: 5
    };
    return a;
});
Run Code Online (Sandbox Code Playgroud)

所以我需要
a)删除Object.defineProperty(exports,“ __esModule”,{value:true}); 线
b)除去需要和从限定出口依赖性
c)不具有内部功能的“a”,然后暴露“一”出口,而是简单地在a.js文件返回“一个”对象

我需要对tsconfig.json和a.ts文件进行哪些更改才能获得所需的Javascript文件或更接近它的文件,从当前a.js到我需要的任何改进都将是巨大的,甚至是3或1或2要求。

一种方法是使a.ts与所需的a.js文件完全相同,然后进行编译,但是由于另一个不相关的要求,我必须使用export语句的方式来制作amd模块。感谢您阅读到这里。请帮忙。

Lou*_*uis 5

您的导出问题可以通过使用export =语法轻松解决。如果你用这个编码你的模块:

var a = {
  b: 5
};

export = a;
Run Code Online (Sandbox Code Playgroud)

它被转译为:

define(["require", "exports"], function (require, exports) {
    "use strict";
    var a = {
        b: 5
    };
    return a;
});
Run Code Online (Sandbox Code Playgroud)

请注意,您还会丢失__esModule属性的创建。

您的问题的其余部分与另一个问题重复。简而言之,TypeScript 编译器没有提供避免发出requireexports依赖项的选项。如果您想删除它们,您必须自己处理发出的代码。