【问题标题】: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/');