我有一些文件,其中一些有依赖关系,其中一些不。 还有cicle依赖。我想通过这种依赖关系对这些文件进行排序,以便以后以正确的顺序连接文件。
这是TypeScript文件,但是我收集了NodeJS程序中我要对TypeScript文件进行排序的所有文件。
示例(这只是随机名称):
答案 0 :(得分:1)
这里有两个选项,第一个基本上是“你不需要”,另一个是使用工具将Humpty Dumpty放在一起。
require
,然后在运行Node时将在运行时为您加载依赖项答案 1 :(得分:0)
您可以在每个文件的顶部放置引用标记,并使用--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"/>
答案 2 :(得分:0)
感谢我已经知道的事情的一些答案,我自己找到了正确的答案,这是我的解决方案:
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