将由许多文件/模块组成的TypeScript项目编译为单个文件

时间:2014-03-11 21:14:26

标签: typescript

我正在编写TypeScript应用程序,并要求将其编译为单个文件;我不想失去定义模块,并且为了使项目更容易管理,我想将它们放在多个文件中。常见的方法:

import _option = require("Option.ts")

不起作用,因为它需要CommonJS或AMD,我无法使用它。有没有办法在项目中使用多个文件和模块,但仍然可以将它们全部编译为单个文件而不使用CommonJS或AMD?

我尝试使用tsc转置程序选项—out FILE生成单个文件,但是当您在任何文件中的任何位置使用export关键字时,它会窒息。

2 个答案:

答案 0 :(得分:3)

为了使用正确的(外部)模块然后输出单个文件,最好的方法是将像r.js这样的AMD构建器与TypeScript编译器输出的AMD模块结合起来。您可以从TypeScript编译为单个JavaScript文件,然后r.js将其构建为单个图层文件。

在你说这不是你想要的之前,你可能也想要缩小你的代码,对吧?在这种情况下,TypeScript编译器将不会执行您所需的操作,但r.js将执行。既然你需要进行额外的构建步骤,请使用适当的外部模块并将其构建到单个文件中,作为构建过程的一部分,而不是按照自己的答案中的建议执行。

答案 1 :(得分:1)

解决方案是使用ts文件顶部的&#34; ///<reference path="reference.ts"/>&#34;做法。如果你了解它,这似乎很简单;关于AMD和CommonJS有很多关于包含模块的东西,但是很难找到它。

所以,要详细说明解决方案,给定三个文件main.tsB.tsC.ts,其中C.ts使用B.ts中的类/模块,main.ts使用两者,这可以让你:

C.ts

///<reference path="B.ts"/>
module C {
  class Foo {}
}

main.ts

///<reference path="B.ts"/>
///<reference path="C.ts"/>

// Use modules directly
var a = new C.Foo();

然后从命令行使用tsc --out file.js main.ts,它将传递所有依赖项并将它们组合在一起。 注意您的文件中不得包含任何根级export语句,否则它们将不会包含在文件输出中;相反,可以在不使用export关键字的情况下访问文件中所有已定义的模块/类。如果您过去依赖于代表模块的文件,那么现在需要将该内容包装在module X { /* original file code here */}类型声明中。

这种方法的另一个优点是,它允许像IntelliJ这样的IDE内省所有类型,并为每个文件正确地提供自动完成和错误检测。

如果您希望在所有地方都包含 lot 文件,则可能值得使用"single references.ts file" approach,您可以在其中列出一个文件中的所有引用并引用它。