Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨多个文件的Typescript内部模块与js缩小_Javascript_Namespaces_Typescript_Minify - Fatal编程技术网

Javascript 跨多个文件的Typescript内部模块与js缩小

Javascript 跨多个文件的Typescript内部模块与js缩小,javascript,namespaces,typescript,minify,Javascript,Namespaces,Typescript,Minify,我在做一个大型的打字项目。我更喜欢创建许多小型类,并将每个类放在单独的文件中,并使用深度嵌套的名称空间(“typescript中的内部模块”)。我认为这是一个很好的实践,因为它鼓励封装、可测试性、可重用性等。我有超过一百个具有深度命名空间的小类型的Script文件。p> 每个typescript文件的编译.js输出包含每个文件的3行自动生成的“样板文件”,用于每个命名空间级别(顶部2行,底部1行)。例如,下面是一个typescript文件,其中包含一个空类,位于名称空间的4个级别内: modul

我在做一个大型的打字项目。我更喜欢创建许多小型类,并将每个类放在单独的文件中,并使用深度嵌套的名称空间(“typescript中的内部模块”)。我认为这是一个很好的实践,因为它鼓励封装、可测试性、可重用性等。我有超过一百个具有深度命名空间的小类型的Script文件。p> 每个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文件,从而去掉这些深层名称空间的样板文件

我知道从内部模块迁移到外部模块可能需要很多工作,但这是您未来的最佳选择

创建外部模块后,可以使用
--module
标志将TypeScript代码编译成CommonJS或AMDmodules:

tsc myfile.ts --module "amd" 
tsc myfile.ts --module "commonjs" 
然后,您可以使用将应用程序中的所有AMD模块捆绑到一个优化文件中

如果您使用commonJS,您可以使用它将所有外部模块捆绑到一个优化文件中。希望能有帮助


我创建了一个Github项目,展示了如何自动化此过程

针对此问题进行优化的最简单方法是使用压缩(例如gzip)-这种重复处理得非常好。您使用任何类型的构建过程吗?您是否尝试过在单个文件中编译?我这样做了,但实际上从来没有检查过这种开销代码的冗余。开销不应该是一个很大的问题,因为创建名称空间只运行一次,而所有东西都只设置了一次?如果您所指的是文件大小开销,那么这可能是一个问题,当然,我不确定是否有一个简单的解决方法。