2013-11-21 63 views
2

我将TypeScript应用程序分成多个文件,通常每个类都有一个文件。当我释放我的应用程序时,我会将它们缩减为一个文件。我遇到的问题是TypeScript生成的__extends函数被放入每个编译的JavaScript文件中。所以我最终得到了最终产品中相同代码的多个副本。TypeScript删除扩展重复项

有没有办法告诉编译器只将__extends函数放在一个JavaScript文件中?有其他解决方案吗?

+0

它不应该的问题有多个副本在你的最终更多的选择文件,因为你的gzip的大小不应该受到影响,因为代码段完全一样。但是,当然,如果你没有为你的脚本提供gzip(为什么不呢?),那么你可能需要全局搜索/替换代码片段,并将小sniplet包含在串联顶部的单独文件中。 –

回答

4

一个解决办法是通过打字稿编译器的输出组合成一个文件:

tsc --out final.js app.ts 

然后,您可以运行如下final.js,这应该只有一个扩展功能。

+0

这是一个很好的解决方案。如果只有在发布模式下编译时有方法在Visual Studio中指定。我想现在我可以创建一个发布脚本。 –

1

将输出合并到文件中的选项非常好,但在所有版本和所有模块版本中都不支持。
为了克服它,您可以使用noEmitHelpers编译器选项来删除辅助函数并将其自己写入单独的文件中。

您应该创建一个新的emitHelperFile.js,其中包含extend函数。

var __extends = (this && this.__extends) || function (d, b) { 
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 
    function __() { this.constructor = d; } 
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 
}; 

而且从编译器生成的输出忽略它

tsc app.ts --noEmitHelpers 

您可以检查这里的编译器https://www.typescriptlang.org/docs/handbook/compiler-options.html