通过NodeJS中的依赖项对TypeScript文件进行sorting
我有一些文件,其中一些有依赖,其中一些没有。 也有cicle依赖关系。 我想通过这个依赖来sorting这个文件,以后按照正确的顺序连接文件。
这是TypeScript文件,但我收集了一个NodeJS程序中我想对TypeScript文件进行sorting的所有文件。
例子(这只是随机的名字):
这里有两个选项,第一个基本上是“你不需要”,另一个是使用一个工具把Humpty Dumpty放在一起。
- 如果在编译TypeScript时使用commonjs作为模块arg,那么节点将处理
require
,然后在运行时Node将在运行时加载依赖 - 你可以使用webpack / browserify这样的工具来连接/捆绑你的输出,它将分析你的依赖关系,并把文件/内容按照正确的顺序放在一个输出文件中
您可以将引用标签放置在每个文件的顶部,并使用--out
CLI选项。 TSC将找出其余的。 循环依赖不会中断TSC,但是您需要考虑到在运行时可能不存在的东西。
Shape.ts
/// <reference path="Test.ts"/>
Test.ts
/// <reference path="Vector.ts"/>
Vector.ts
/// <reference path="Group.ts"/> /// <reference path="Shape.ts"/>
感谢我已经知道的事情的一些答案,我自己find了一个正确的答案,这里是我的解决scheme:
var stack = []; var visited = []; function topologicalSortUtil(item) { visited.push(item.fullPath); for (var i = 0; i <= item.dependencies.length - 1; i++) { var dependency = item.dependencies[i]; if (visited.indexOf(dependency.fullPath) !== -1) { continue; } topologicalSortUtil(dependency); } stack.push(item); } function topologicalSort(data) { for (var i = 0; i <= data.length - 1; i++) { var item = data[i]; if (visited.indexOf(item.fullPath) !== -1) { continue; } topologicalSortUtil(item); } return stack; }
DEMO
参考文献:
https://en.wikipedia.org/wiki/Topological_sorting
https://www.youtube.com/watch?v=ddTC4Zovtbc
https://github.com/mission-peace/interview/blob/master/src/com/interview/graph/TopologicalSort.java