@@ -22,36 +22,103 @@ function findInDir(dir, reg, callback) {
22
22
23
23
dir = path . resolve ( dir ) ;
24
24
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
+ }
26
30
27
- fs . readdir ( dir , function ( err , list ) {
31
+ listDir ( dir , '' , function ( err , list ) {
28
32
if ( err ) {
29
33
callback ( err ) ;
30
34
return ;
31
35
}
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 ) ;
50
41
}
42
+ return true ;
51
43
} )
52
- } , callback ) ;
44
+ . value ( ) ;
45
+
46
+ callback ( null , result ) ;
53
47
} ) ;
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
+
55
122
56
123
fs . exists ( dir , function ( exist ) {
57
124
if ( ! exist ) {
@@ -77,8 +144,6 @@ function findInDir(dir, reg, callback) {
77
144
callback ( null , result ) ;
78
145
} ) ;
79
146
} ) ;
80
-
81
-
82
147
} ;
83
148
84
149
/**
@@ -116,7 +181,7 @@ var copyDirSync = exports.copyDirSync = function (src_path, target_path, config)
116
181
}
117
182
118
183
119
- fs . readdirSync ( src_path ) . forEach ( function ( p ) {
184
+ fs . readdirSync ( src_path ) . forEach ( function ( p ) {
120
185
var skip = false ;
121
186
if ( config . excludes ) {
122
187
config . excludes . forEach ( function ( reg ) {
0 commit comments