假设我有两个文件
AFile.ts
/// <reference path="ZFile.ts" />
new Z().Foo();
ZFile.ts
class Z
{
Foo() { }
}
有没有办法按照所需的顺序在单个js
文件中生成所有脚本(ZFile
之前需要AFile
才能获得Z
的定义?
答案 0 :(得分: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>
我的所有脚本都在一个文件中。
编译器不会缩小,您必须使用bundle并在Release或set
上编译BundleTable.EnableOptimizations = true;
您还可以使用Web Essentials进行缩小,或者抓取内容并在其他位置进行缩小。
答案 1 :(得分:10)
现在VS Typescript Extension支持合并到一个文件
确保您已安装扩展程序Tools -> Extensions and Updates
(默认情况下,VS2015已安装)
转到项目属性并检查Combine JavaScript output into file
:
拥有/// <reference />
(如问题所述)很重要,它有助于tsc
在合并之前按依赖项排序文件。
<小时/> 然后,最小化束可以照常使用:
bundles.Add(new ScriptBundle("~/bundles/finale").Include("~/js/all.js"));
并在视野中
@Scripts.Render("~/bundles/finale")
答案 2 :(得分:4)
使用--out参数。
tsc AFile.ts ZFile.ts --out single.js
typescript编译器将自动为您执行依赖关系导航。
答案 3 :(得分:2)
假设所有ts文件都直接或间接位于名为'ts'的文件夹下,您可以编写一个tt脚本,将所有.js文件(但不是min.js)合并到文件myApp.js和所有文件中你的min.js文件到myApp.min.js。
要获取文件的顺序,您可以处理子文件夹:
string[] FolderOrder =
{
@"libs\utils\",
@"libs\controls\",
@"app\models",
@"app\viewmodels",
@".",
};