我正在处理大型打字稿项目。我更喜欢创建许多小类并将每个小类放在一个单独的文件中,并使用深层嵌套的命名空间(>内部模块'在typescript中)。我认为这是一个很好的做法,因为它鼓励封装,可测试性,可重用性等。我有超过一百个具有深命名空间的小打字稿文件。
每个打字稿文件的已编译.js输出包含3行自动生成的'样板文件'对于每个文件,对于每个级别的命名空间(顶部2个,底部1个)。例如,这是一个包含一个空类的typescript文件,在4个命名空间级别内:
module a.b.c.d {
export class MyClass {
constructor() {
}
}
}
这将编译成以下.js:
var a;
(function (a) {
var b;
(function (b) {
var c;
(function (c) {
var d;
(function (d) {
var MyClass = (function () {
function MyClass() {
}
return MyClass;
})();
d.MyClass = MyClass;
})(d = c.d || (c.d = {}));
})(c = b.c || (b.c = {}));
})(b = a.b || (a.b = {}));
})(a || (a = {}));
为了提高性能,我想将我的.js文件合并/缩小为一个文件进行制作。如果我只是以正确的顺序附加文件,则将为每个文件重复进入和退出命名空间的样板。对于小.ts文件,这将包含很大的开销。
我的问题:在顺序.js文件共享同一命名空间的情况下,是否有某种方法可以合并/缩小我的.js文件,从而剥离这些深层命名空间的样板?
答案 0 :(得分:1)
据我所知,从内部模块迁移到外部模块可能会有很多工作,但它是您未来的最佳选择。
创建外部模块后,您可以使用--module
标志将TypeScript代码编译为CommonJS或AMDmodules:
tsc myfile.ts --module "amd"
tsc myfile.ts --module "commonjs"
然后,您可以使用the require.js optimizer将应用程序中的所有AMD模块捆绑到一个优化文件中。
如果您使用commonJS,则可以使用Browserify将所有外部模块捆绑到一个优化文件中。希望它有所帮助。
我创建了一个Github项目,展示如何自动执行此过程https://github.com/remojansen/modern-workflow-demo