【问题标题】:Sort TypeScript files by dependencies in NodeJS在 NodeJS 中按依赖项对 TypeScript 文件进行排序
【发布时间】:2016-01-13 19:56:45
【问题描述】:

我有一些文件,其中一些有依赖关系,而另一些则没有。 还有 cicle 依赖项。我想按此依赖项对这些文件进行排序,以便稍后以正确的顺序连接这些文件。

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

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

【问题讨论】:

    标签: node.js sorting dependencies typescript


    【解决方案1】:

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

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

    【讨论】:

    • 我知道我不必这样做,但我想自己做是有原因的。
    【解决方案2】:

    感谢一些我已经知道的事情的答案,我自己找到了一个正确的答案,这是我的解决方案:

    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

    【讨论】:

      【解决方案3】:

      您可以在每个文件的顶部放置参考标签,并使用--out CLI 选项。 TSC 将解决剩下的问题。循环依赖不会破坏 TSC,但您确实需要考虑到某些东西在运行时可能还不存在。

      形状.ts

      /// <reference path="Test.ts"/>
      

      Test.ts

      /// <reference path="Vector.ts"/>
      

      矢量.ts

      /// <reference path="Group.ts"/>
      /// <reference path="Shape.ts"/>
      

      【讨论】:

      猜你喜欢
      • 2013-08-30
      • 2011-04-18
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多