按NodeJS中的依赖项对TypeScript文件进行排序

时间:2015-10-15 11:20:23

标签: node.js sorting dependencies typescript

我有一些文件,其中一些有依赖关系,其中一些不。 还有cicle依赖。我想通过这种依赖关系对这些文件进行排序,以便以后以正确的顺序连接文件。

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

示例(这只是随机名称):

enter image description here

3 个答案:

答案 0 :(得分:1)

这里有两个选项,第一个基本上是“你不需要”,另一个是使用工具将Humpty Dumpty放在一起。

  1. 如果您在编译TypeScript时使用commonjs作为模块arg,则节点将为您处理require,然后在运行Node时将在运行时为您加载依赖项
  2. 您可以使用webpack / browserify之类的工具对输出进行连接/捆绑,这些工具将分析您的依赖关系,并将文件/内容按正确的顺序放在单个输出文件中

答案 1 :(得分: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"/>

答案 2 :(得分: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