【发布时间】:2016-01-13 19:56:45
【问题描述】:
我有一些文件,其中一些有依赖关系,而另一些则没有。 还有 cicle 依赖项。我想按此依赖项对这些文件进行排序,以便稍后以正确的顺序连接这些文件。
这是 TypeScript 文件,但我收集了 NodeJS 程序中的所有文件,我想在其中对 TypeScript 文件进行排序。
示例(这只是随机名称):
【问题讨论】:
标签: node.js sorting dependencies typescript
我有一些文件,其中一些有依赖关系,而另一些则没有。 还有 cicle 依赖项。我想按此依赖项对这些文件进行排序,以便稍后以正确的顺序连接这些文件。
这是 TypeScript 文件,但我收集了 NodeJS 程序中的所有文件,我想在其中对 TypeScript 文件进行排序。
示例(这只是随机名称):
【问题讨论】:
标签: node.js sorting dependencies typescript
这里有两个选项,第一个基本上是“你不需要”,另一个是使用工具将 Humpty Dumpty 放在一起。
require,然后在运行时 Node 将在运行时为您加载依赖项【讨论】:
感谢一些我已经知道的事情的答案,我自己找到了一个正确的答案,这是我的解决方案:
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;
}
参考资料:
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
【讨论】:
您可以在每个文件的顶部放置参考标签,并使用--out CLI 选项。 TSC 将解决剩下的问题。循环依赖不会破坏 TSC,但您确实需要考虑到某些东西在运行时可能还不存在。
形状.ts
/// <reference path="Test.ts"/>
Test.ts
/// <reference path="Vector.ts"/>
矢量.ts
/// <reference path="Group.ts"/>
/// <reference path="Shape.ts"/>
【讨论】: