2015-10-15 84 views
1

我有一些文件,其中一些文件依赖于其中的某些文件。 也有cicle依赖关系。我想通过这种依赖性对这些文件进行排序,以后按照正确的顺序连接文件。按NodeJS中的依赖关系对TypeScript文件进行排序

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

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

enter image description here

回答

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

1

这里有两个选择,第一个基本上是“你不需要”,另一种是使用工具把矮胖混合在一起。

  1. 节点将处理require你,如果你编译你的打字稿时使用CommonJS的为你的模块ARG,那么当运行节点将加载依赖关系在运行时
  2. 可以Concat的/与工具捆绑你的输出像webpack/browserify将分析你的依赖,并把文件/文件以正确的顺序内容一个输出文件
+0

我知道,我没有做到这一点,但它有一个原因,我想待办事项它由我自己。 –

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"/> 
+0

真的不推荐使用:http://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md – ahz

+0

@andrej真正不被推荐的是使用内部模块。我不推荐使用它们,但J. Schilling已经解释说他/他仍然想要。 – thoughtrepo