2013-06-29 122 views
17

假设我有两个文件TypeScript捆绑和缩小?

AFile.ts

/// <reference path="ZFile.ts" /> 
new Z().Foo(); 

ZFile.ts

class Z 
{ 
    Foo() { } 
} 

有没有一种方法来生成一个js文件中的顺序所有脚本它需要(需要ZFile之前AFile得到Z)的定义?

回答

10

现在VS打字稿扩展支持合并到一个文件中。
请确保您已经安装了扩展Tools -> Extensions and Updates(VS2015默认有它)

enter image description here

转到项目属性,并检查Combine JavaScript output into fileenter image description here

重要的是要有/// <reference />(如问题),它可以帮助tsc在合并之前通过依赖关系排序文件。


那么对于最小化束可以照常使用:

bundles.Add(new ScriptBundle("~/bundles/finale").Include("~/js/all.js")); 

,并鉴于

@Scripts.Render("~/bundles/finale") 
+0

这也适用于其他模块类型,如系统?是否有可能使用这个而不是像webpack或babel这样的模块加载器,即。节点包? –

+0

此用户界面在我的机器上被禁用。任何想法为什么? – user2173353

+0

此外,这会在构建期间从TS文件构建JS文件。是否有办法通过捆绑配置来实现这一点? :^) – user2173353

4

使用--out参数。

tsc AFile.ts ZFile.ts --out single.js 

打字稿编译器会自动为您做相关性导航。

16

在生成后事件我添加了一个调用TypeScript编译

tsc "..\Content\Scripts\Start.ts" --out "..\Content\Scripts\all.js" 

在我加入

bundles.Add(new ScriptBundle("~/scripts/all").Include("~/Content/Scripts/all.js")); 

_Layout.cshtml文件我加

@Scripts.Render("~/Scripts/all") 

而且同捆配置我得到了

<script src="/Scripts/all?v=vsTcwLvB3b7F7Kv9GO8..."></script> 

这是我所有的脚本在一个单一的文件。


编译器不会再压缩,你必须使用包和汇编发布或设置

BundleTable.EnableOptimizations = true; 

您还可以再压缩使用Web要点或抓住内容和minifing别处。

+0

你如何从救全自动编译停止吗?你必须指定每个文件还是可以使用通配符? – formatc

+0

您可以使用'IncludeDirectory()'包含所有文件:-) 另请参阅:http://stackoverflow.com/questions/12926830/typescript-compiling-as-a-single-js-file –

+0

它是错的在包中包含(“〜/ Content/Scripts/all.ts”)); ? – Revious

2

假设所有的ts文件都直接或间接地位于名为say'ts'的文件夹下,您可以编写一个将所有.js文件(但不是min.js)合并到文件myApp.js和所有文件你的min.js文件放入myApp.min.js。

要获得你可以这样处理子文件的顺序:

string[] FolderOrder = 
{ 
    @"libs\utils\", 
    @"libs\controls\", 
    @"app\models", 
    @"app\viewmodels", 
    @".", 
}; 
+0

什么是tt脚本? –