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

时间:2017-11-15 01:00:12

标签: javascript typescript requirejs amd tsc

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

{
    "compileOnSave": true,
    "compilerOptions": {
        "module": "amd",
        "noImplicitAny": false,
        "removeComments": false,
        "preserveConstEnums": true,
        "strictNullChecks": true,
        "sourceMap": false
    }
}

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

export function a() {
    var a = {
        b: 5
    };
    return a;
}

已编译的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;
 });

我需要生成的JavaScript文件:

define(function () {
    "use strict";
    var a = {
        b: 5
    };
    return a;
});

所以我需要 a)删除Object.defineProperty(exports,“__ myModule”,{value:true});线
b)从定义中删除require和export依赖项 c)没有内部函数“a”然后在导出上公开“a”,而只是简单地在a.js文件中返回“a”对象

我需要对tsconfig.json和a.ts文件进行哪些更改才能获得所需的Javascript文件或更接近它的内容,从当前a.js到我需要的任何改进都会很棒,甚至1或2满足3个要求。

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

1 个答案:

答案 0 :(得分:3)

使用export =语法可以轻松修复导出问题。如果您使用以下代码对模块进行编码:

var a = {
  b: 5
};

export = a;

它被解释为:

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

请注意,您还将失去__esModule属性的创建。

你的问题的其余部分重复了another question。简而言之,TypeScript编译器不提供任何选项来避免发出requireexports依赖项。如果要删除它们,则必须自己处理发出的代码。