2014-01-20 68 views
0

文件夹名称更高我需要把所有文件夹以高于1.0.0的名称与node.js的
搜索比X与节点

如何与下面的结构实现这一目标。

|---version 
    |--1.0.0 
    |--1.2.0 
    |--0.9.0 

非常感谢,我对节点非常陌生。

+1

所以..你到目前为止做了什么?没有? – ariel

+1

为什么downvotes? omg people –

回答

2

如果有目录是一个有效的semver字符串(像你这样),最简单的方法是使用semver模块,并使用gt函数的名称。类似这样的:

var greater = function (dir, cb){ 
    var max = null; 
    fs.readdir (dir, function (error, entries){ 
     if (error) return cb (error); 
     if (!entries.length) return cb(); 
     entries.forEach (function (entry){ 
      //Suppose there're no files in the directory 
      if (!max) return max = entry; 
      if (semver.gt (entry, max)) max = entry; 
     }); 
     cb (null, max) 
    }); 
}; 

greater ("dir", function (error, dir){ 
    if (error) return handleError (error); 
    if (dir){ 
     //dir is the greater 
    }else{ 
     //No directories 
    } 
}); 
+0

太棒了,这让我走上了正轨!谢谢 –

0

这是一个同步的版本:

var fs = require('fs'); 

var regex = /^[1-9]\.\d\.\d/; 

var folder = __dirname + "/version/"; 

var files = fs.readdirSync(folder).filter(function(file){ 

    return regex.test(file) && 
      fs.statSync(folder + file).isDirectory(); 

}) 
0

修正@Gabriels动态答案,以适应。
最终需要一个同步解决方案,在我的grunt init之前插入。 以下是最终代码,查找并返回最新文件夹版本的名称。

var getLatest = function (cwd) { 
    var max = false; 
    var dirs = fs.readdirSync(cwd); 

    if (!dirs.length) { 
     //No directories 
    } else { 
     dirs.forEach(function (dir) { 
      if (!max) { 
       return max = dir; 
      } 
      if (semver.gt(dir, max)) { 
       max = dir; 
      } 
     }); 
    } 
    return max; 
}; 

getLatest('build/');