通过NodeJS中的依赖项对TypeScript文件进行sorting

我有一些文件,其中一些有依赖,其中一些没有。 也有cicle依赖关系。 我想通过这个依赖来sorting这个文件,以后按照正确的顺序连接文件。

这是TypeScript文件,但我收集了一个NodeJS程序中我想对TypeScript文件进行sorting的所有文件。

例子(这只是随机的名字):

在这里输入图像说明

这里有两个选项,第一个基本上是“你不需要”,另一个是使用一个工具把Humpty Dumpty放在一起。

  1. 如果在编译TypeScript时使用commonjs作为模块arg,那么节点将处理require ,然后在运行时Node将在运行时加载依赖
  2. 你可以使用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