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



这就是我的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,"__esModule",{value:true});行
b)从define中删除require和exports依赖项
c)没有内部函数"a",然后在导出时公开"a"。而是简单地在.js文件中返回"a"对象

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

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

使用export =语法可以很容易地解决导出问题。如果你用以下代码编码你的模块:

var a = {
b: 5
};
export = a;

它被传送到这个:

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

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

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

最新更新