Skip to content

Commit d17a996

Browse files
committed
add file util
1 parent 7976025 commit d17a996

File tree

1 file changed

+90
-25
lines changed

1 file changed

+90
-25
lines changed

lib/fileutil.js

Lines changed: 90 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,103 @@ function findInDir(dir, reg, callback) {
2222

2323
dir = path.resolve(dir);
2424

25-
function listDir(dir, from, callback) {
25+
fs.exists(dir, function (exist) {
26+
if(!exist) {
27+
callback(new Error('findInDir: path ' + dir + ' not exist;'));
28+
return;
29+
}
2630

27-
fs.readdir(dir, function(err, list){
31+
listDir(dir, '', function(err, list) {
2832
if (err) {
2933
callback(err);
3034
return;
3135
}
32-
33-
list = list.filter(function (file) {
34-
return !(/^\./.test(file));
35-
});
36-
37-
async.map(list, function(p, callback){
38-
var abs = path.join(dir, p);
39-
var p2 = path.join(from, p);
40-
41-
fs.stat(abs, function(err, stat){
42-
if (err) {
43-
callback(err);
44-
return;
45-
}
46-
if (stat.isDirectory()) {
47-
listDir(abs, p2, callback);
48-
} else {
49-
callback(null, p2);
36+
var result = _.chain(list)
37+
.flatten()
38+
.filter(function(p){
39+
if(reg instanceof RegExp) {
40+
return reg.test(p);
5041
}
42+
return true;
5143
})
52-
}, callback);
44+
.value();
45+
46+
callback(null, result);
5347
});
54-
}
48+
});
49+
}
50+
51+
function listDir(dir, from, callback) {
52+
53+
fs.readdir(dir, function(err, list){
54+
if (err) {
55+
callback(err);
56+
return;
57+
}
58+
59+
list = list.filter(function (file) {
60+
return !(/^\./.test(file));
61+
});
62+
63+
async.map(list, function(p, callback){
64+
var abs = path.join(dir, p);
65+
var p2 = path.join(from, p);
66+
67+
fs.stat(abs, function(err, stat){
68+
if (err) {
69+
callback(err);
70+
return;
71+
}
72+
if (stat.isDirectory()) {
73+
listDir(abs, p2, callback);
74+
} else {
75+
callback(null, p2);
76+
}
77+
})
78+
}, callback);
79+
});
80+
}
81+
82+
var statTree = exports.statTree = function (dir, fn, callback) {
83+
84+
fs.readdir(dir, function(err, list) {
85+
86+
if (err) {
87+
callback(err);
88+
return;
89+
}
90+
91+
// 排除隐藏文件
92+
list = list.filter(function (file) {
93+
return !(/^\./.test(file));
94+
});
95+
96+
async.each(list, function(p, callback){
97+
var abs = path.join(dir, p);
98+
99+
fs.stat(abs, function(err, stat){
100+
101+
if (err) {
102+
callback(err);
103+
return;
104+
}
105+
106+
fn({
107+
path: abs,
108+
stat: stat
109+
});
110+
111+
if (stat.isDirectory()) {
112+
statTree(abs, fn, callback);
113+
}
114+
})
115+
}, callback);
116+
});
117+
}
118+
119+
exports.TreeWalker = function (dir, fn, callback) {
120+
121+
55122

56123
fs.exists(dir, function (exist) {
57124
if(!exist) {
@@ -77,8 +144,6 @@ function findInDir(dir, reg, callback) {
77144
callback(null, result);
78145
});
79146
});
80-
81-
82147
};
83148

84149
/**
@@ -116,7 +181,7 @@ var copyDirSync = exports.copyDirSync = function (src_path, target_path, config)
116181
}
117182

118183

119-
fs.readdirSync(src_path).forEach(function (p){
184+
fs.readdirSync(src_path).forEach(function (p) {
120185
var skip = false;
121186
if (config.excludes) {
122187
config.excludes.forEach(function (reg) {

0 commit comments

Comments
 (0)