问题:
关于编译TypeScript代码服务器端,有没有办法获取单个.ts文件的所有引用路径的列表 - 或者更好,整个编译(从单个.ts文件开始)?按顺序,最好是。
如果可能,我更愿意使用现有的解析器,而不是使用新代码解析文件。
上下文
由于我认为它不存在,我想写:
所以在发布模式下,<tsb:typescript root="app.ts" runat="server" />
会产生
<script type="text/javascript" src="app.ts?32490839"></script>
其中提供的脚本是按需缓存的单文件脚本。
在调试模式下,未修改的标签会产生:
<script type="text/javascript" src="dependency1.ts?32490839"></script>
<script type="text/javascript" src="dependency2.ts?32490839"></script>
<script type="text/javascript" src="app.ts?32490839"></script>
据我所知,TypeScript Visual Studio插件或任何Optimizer捆绑器都不支持这种操作模式。捆绑包接近我要求的,但是它们没有缓存 - 它们没有单文件编译而没有烦人的显式捆绑文件。
在编译脚本时,我不介意在第一个请求时遇到任何性能损失。除此之外,也许有一个非常好的理由是这个设置不应该存在或不存在。如果不能或不能做到这一点,我也会欣赏这方面的答案。
我已经在StackOverflow上看到了其他问题,这些问题在我的解释中围绕着这种愿望而跳跃,但没有一个如此明确,没有相关答案。
谢谢!
另外,在不同的进程中执行tsc.exe是我的HttpHandler在运行时编译的最佳方式,还是有一个灵活,安全,简单的方法来进行此过程?
答案 0 :(得分:1)
如果您启用优化并使用捆绑包HTML帮助程序,则捆绑包会为JavaScript执行此操作,并将捆绑包添加到页面中。 cache-bust URL是JavaScript文件的简短哈希,因此如果更改了bundle中的任何脚本,新哈希会将其从客户端缓存中分离出来。
我的建议是捆绑已编译的JavaScript并使Bundler minify和cache-bust。您可以使用out标志让TypeScript生成包含所有依赖项的单个文件...
tsc --out final.js app.ts
您的捆绑包现在只需要包含final.js - 这可以节省明确列出所有文件并稍后添加新文件。
你仍然可以在运行时编写一些内容来拦截和编译。我倾向于在运行时之前完成这项工作,因为TypeScript的一个好处是编译时检查 - 如果客户端要求脚本,您将如何处理编译错误。即使你在运行时这样做,我仍然会将JavaScript引用添加到页面,而不是.ts文件。
答案 1 :(得分:0)
您可以以交互方式或在节点中使用 Madge。
另见:How can I see the full nodejs "require()" tree starting at a given file?