javascript - 编译多个 Typescript 文件

标签 javascript node.js compiler-construction webserver typescript

我的 nodejs Typescript 服务器变得越来越复杂,现在依赖于另一个 .ts 文件中定义的一些类。这造成了一个奇怪的编译问题:

  • tsc server.ts 编译一切正常。但是 node server.js 在 从另一个 .ts 文件中实例化一个类的第一行

  • tsc --out server.js server.ts 导致错误消息:“模块 发射与发射的脚本发生冲突”

  • tsc --out serv.js server.ts 似乎可以工作,但实际上可以编译 一切除了 server.ts。其他文件的代码在那里,node serv.js 只是返回而没有任何输出

我不是唯一遇到此错误的人,https://typescript.codeplex.com/workitem/294不幸的是,codeplex 上的解决方案对我不起作用。

如何正确使用tsc

最佳答案

您的server.ts依赖项必须是使用顶级 export 导出其表面积的模块指令和 server.ts应该使用 import 加载它们指令。这里的根本原因是 TypeScript 有两种不同的 Universe 可供编译。

第一个是您用于常规网页的默认文件,其中一些简单的加载器以某种固定顺序获取 1 个或多个源文件并按该顺序执行它们,而您自己进行依赖排序。这称为“程序”编译。在程序编译中,您可以进行并行编译(a.ts => a.js,b.ts => b.js),也可以使用 --out 进行串联编译。 ((a.ts + b.ts) => out.js)。

程序 编译中,您使用///<reference> 引用您的引用资料。标签。如果这些引用是对源文件( .ts )的引用,如果使用 --out,它们将被连接到输出中。 , 或作为并排发出 .js否则归档。如果这些引用是对声明文件( .d.ts )的引用,那么您基本上是在说您将获得通过外部加载器加载的那些文件的定义(即浏览器中的 <script> 标记)。

第二种是您将用于 node.js 或其他执行异步或幂等模块加载并使用运行时依赖解析的环境的编译类型。这称为“module”编译。在这里,--module您传递给 tsc 的标志很重要,唯一有效的做法是并行编译,因为将单个文件作为模块加载是(通常)node.js 等模块加载器的工作方式。

模块编译中,你使用export顶级对象(函数、类、模块、接口(interface)或变量)上的关键字,以控制对使用 import 引用您的代码可用的内容.你应该只拥有 /// <reference>指向 .d.ts 的标签声明文件,因为基于模块的运行时加载器没有加载裸 JS 文件的概念。您不会使用 --out 进行编译.

从不想要混合和匹配这些编译模式,因为它根本行不通。事实上,在 0.8.2.0 中,tsc如果您尝试这样做,只会发出错误。

关于javascript - 编译多个 Typescript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287954/

相关文章:

JavaScript/JQuery : Add Numbers from Fields accounting for Undefined (with 0)

node.js - super 账本结构 1.4 : How to register to chaincode emitted events?

javascript - MongoDB init-script 未使用 docker-compose 启动

c++ - 增加堆栈不起作用

javascript - 使用 JQuery .append() 播放两次 html5 视频(音频加倍)

javascript - 调整面板在 Bootstrap 中的位置

javascript - Operator Instanceof 在 Console.log 串联中给出不同的结果

javascript - Sequelize,请求带有评级和标签的产品时出现问题

Java 到 C 的交叉编译

c - 修复给定代码中的冲突? "25 shift/reduce conflicts [-Wconflicts-sr] "