Node.js 在NodeJS中按依赖项对TypeScript文件排序
我有一些文件,其中一些有依赖关系,有些没有。 还有cicle依赖关系。我想按此依赖项对这些文件进行排序,以便稍后按正确的顺序对这些文件进行排序 这是TypeScript文件,但我在NodeJS程序中收集所有文件,我想在其中对TypeScript文件进行排序 示例(这只是随机名称):Node.js 在NodeJS中按依赖项对TypeScript文件排序,node.js,sorting,dependencies,typescript,Node.js,Sorting,Dependencies,Typescript,我有一些文件,其中一些有依赖关系,有些没有。 还有cicle依赖关系。我想按此依赖项对这些文件进行排序,以便稍后按正确的顺序对这些文件进行排序 这是TypeScript文件,但我在NodeJS程序中收集所有文件,我想在其中对TypeScript文件进行排序 示例(这只是随机名称): 这里有两种选择,第一种基本上是“你不需要”,另一种是使用工具将Humpty Dumpty组合在一起 如果您在编译TypeScript时使用commonjs作为模块参数,则Node将为您处理require,然后在运行时
这里有两种选择,第一种基本上是“你不需要”,另一种是使用工具将Humpty Dumpty组合在一起
require
,然后在运行时Node将在运行时为您加载依赖项您可以在每个文件的顶部放置引用标记,并使用
--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"/>
//
///
感谢您对我已经知道的事情给出的一些答案,我自己找到了一个正确的答案,以下是我的解决方案:
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;
}
var堆栈=[];
var=[];
函数topologicalSortUtil(项){
已访问。推送(项目。完整路径);
对于(var i=0;我知道我不必这样做,但我想自己这样做是有原因的。真的建议不要使用out:@andrej真正不建议使用的是内部模块。我也不建议使用它们,但J.Schilling已经解释说他/他仍然想使用。