lhk*_*lhk 9 javascript compiler-construction webserver node.js 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正确使用?
Rya*_*ugh 16
您的server.ts依赖项需要是使用顶级export指令导出其表面区域的模块,并且server.ts应使用import指令加载它们.这里的根本原因是TypeScript有两种不同类型的Universe用于编译.
第一个是您用于常规网页的默认网页,其中一些简单的加载程序以某个固定顺序获取一个或多个源文件并按此顺序执行它们,并且您可以自己进行依赖项排序.这称为" 程序 "编译.在程序编译中,您可以进行并行编译(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您传递的标志很tsc重要,唯一有效的事情是并行编译,因为将单个文件作为模块加载(通常)如何在node.js等中运行模块加载器.
在模块编译中,您可以在export顶级对象(函数,类,模块,接口或var)上使用关键字来控制引用您的代码可用的内容import.您应该只有/// <reference>指向.d.ts声明文件的标记,因为基于模块的运行时加载器没有加载裸JS文件的概念.你不会编译--out.
你永远不想混合和匹配这些编译模式,因为它根本不起作用.实际上,在0.8.2.0中,tsc如果您尝试执行此操作,则只会发出错误.
| 归档时间: |
|
| 查看次数: |
4595 次 |
| 最近记录: |