我有一些文件,其中一些文件依赖于其中的某些文件。 也有cicle依赖关系。我想通过这种依赖性对这些文件进行排序,以后按照正确的顺序连接文件。按NodeJS中的依赖关系对TypeScript文件进行排序
这是TypeScript文件,但我收集了一个NodeJS程序中我想对TypeScript文件进行排序的所有文件。
例(这只是随机的名字):
我有一些文件,其中一些文件依赖于其中的某些文件。 也有cicle依赖关系。我想通过这种依赖性对这些文件进行排序,以后按照正确的顺序连接文件。按NodeJS中的依赖关系对TypeScript文件进行排序
这是TypeScript文件,但我收集了一个NodeJS程序中我想对TypeScript文件进行排序的所有文件。
例(这只是随机的名字):
感谢的是我已经知道一些事情的答案,我找到了一个正确的答案我自己,这里是我的解决方案:
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
这里有两个选择,第一个基本上是“你不需要”,另一种是使用工具把矮胖混合在一起。
require
你,如果你编译你的打字稿时使用CommonJS的为你的模块ARG,那么当运行节点将加载依赖关系在运行时您可以在每个文件的顶部放置参考标记,并使用--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"/>
真的不推荐使用:http://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md – ahz
@andrej真正不被推荐的是使用内部模块。我不推荐使用它们,但J. Schilling已经解释说他/他仍然想要。 – thoughtrepo
我知道,我没有做到这一点,但它有一个原因,我想待办事项它由我自己。 –