Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在NodeJS中按依赖项对TypeScript文件排序_Node.js_Sorting_Dependencies_Typescript - Fatal编程技术网

Node.js 在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,然后在运行时

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

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

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


这里有两种选择,第一种基本上是“你不需要”,另一种是使用工具将Humpty Dumpty组合在一起

  • 如果您在编译TypeScript时使用commonjs作为模块参数,则Node将为您处理
    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已经解释说他/他仍然想使用。