【问题标题】:Search for folder names higher than X with node使用节点搜索高于 X 的文件夹名称
【发布时间】:2014-01-21 17:48:43
【问题描述】:

我需要使用 node.js 获取名称高于 1.0.0 的所有文件夹

我怎样才能用下面的结构实现这一点。

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

谢谢,我是 node 新手。

【问题讨论】:

  • 所以..到目前为止你做了什么?什么都没有?
  • 为什么投反对票?天哪

标签: javascript node.js fs


【解决方案1】:

如果目录的名称是有效的 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
    }
});

【讨论】:

    【解决方案2】:

    这是一个同步版本:

    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();
    
    })
    

    【讨论】:

      【解决方案3】:

      修改了@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/');

      【讨论】:

        猜你喜欢
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        相关资源
        最近更新 更多