在多个文件和js缩小之间的Typescript内部模块

时间:2015-05-05 14:54:07

标签: javascript namespaces typescript minify

我正在处理大型打字稿项目。我更喜欢创建许多小类并将每个小类放在一个单独的文件中,并使用深层嵌套的命名空间(>内部模块'在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文件,从而剥离这些深层命名空间的样板?

1 个答案:

答案 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