2015-10-15 54 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