You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					86 lines
				
				4.1 KiB
			
		
		
			
		
	
	
					86 lines
				
				4.1 KiB
			| 
											2 years ago
										 | # Readdir-Glob
 | ||
|  |  [](https://coveralls.io/github/Yqnn/node-readdir-glob?branch=master) | ||
|  | 
 | ||
|  | Recursive version of fs.readdir wih stream API and glob filtering. | ||
|  | Uses the `minimatch` library to do its matching. | ||
|  | 
 | ||
|  | Requires Node.js 10.0 or later. | ||
|  | 
 | ||
|  | ## Performances
 | ||
|  | 
 | ||
|  | Compared to `glob`, `readdir-glob` is memory efficient: no matter the file system size, or the number of returned files, the memory usage is constant. | ||
|  | 
 | ||
|  | The CPU cost is proportional to the number of files in `root` folder, minus the number files in `options.skip` folders. | ||
|  | 
 | ||
|  | **Advice**: For better performances use `options.skip` to restrict the search as much as possible. | ||
|  | 
 | ||
|  | ## Usage
 | ||
|  | 
 | ||
|  | Install with npm | ||
|  | ``` | ||
|  | npm i readdir-glob | ||
|  | ``` | ||
|  | 
 | ||
|  | ```javascript | ||
|  | const readdirGlob = require('readdir-glob'); | ||
|  | const globber = readdirGlob('.', {pattern: '**/*.js'}); | ||
|  | globber.on('match', match => { | ||
|  |     // m.relative: relative path of the matched file | ||
|  |     // m.absolute: absolute path of the matched file | ||
|  |     // m.stat: stat of the matched file (only if stat:true option is used) | ||
|  | }); | ||
|  | globber.on('error', err => { | ||
|  |     console.error('fatal error', err); | ||
|  | }); | ||
|  | globber.on('end', (m) => { | ||
|  |     console.log('done'); | ||
|  | }); | ||
|  | ``` | ||
|  | 
 | ||
|  | ## readdirGlob(root, [options])
 | ||
|  | 
 | ||
|  | * `root` `{String}` Path to be read recursively, *default*: `'.'` | ||
|  | * `options` `{Object}` Options, *default*: `{}` | ||
|  | 
 | ||
|  | Returns a EventEmitter reading given root recursively. | ||
|  | 
 | ||
|  | ### Properties
 | ||
|  | 
 | ||
|  | * `options`: The options object passed in. | ||
|  | * `paused`: Boolean which is set to true when calling `pause()`. | ||
|  | * `aborted` Boolean which is set to true when calling `abort()`.  There is no way at this time to continue a glob search after aborting. | ||
|  | 
 | ||
|  | ### Events
 | ||
|  | 
 | ||
|  | * `match`: Every time a match is found, this is emitted with the specific thing that matched. | ||
|  | * `end`: When the matching is finished, this is emitted with all the matches found.  | ||
|  | * `error`: Emitted when an unexpected error is encountered. | ||
|  | 
 | ||
|  | ### Methods
 | ||
|  | 
 | ||
|  | * `pause()`: Temporarily stop the search | ||
|  | * `resume()`: Resume the search | ||
|  | * `abort()`: Stop the search forever | ||
|  | 
 | ||
|  | ### Options
 | ||
|  | 
 | ||
|  | * `pattern`: Glob pattern or Array of Glob patterns to match the found files with. A file has to match at least one of the provided patterns to be returned. | ||
|  | * `ignore`: Glob pattern or Array of Glob patterns to exclude matches. If a file or a folder matches at least one of the provided patterns, it's not returned. It doesn't prevent files from folder content to be returned. Note: `ignore` patterns are *always* in `dot:true` mode. | ||
|  | * `skip`: Glob pattern or Array of Glob patterns to exclude folders. If a folder matches one of the provided patterns, it's not returned, and it's not explored: this prevents any of its children to be returned. Note: `skip` patterns are *always* in `dot:true` mode. | ||
|  | * `mark`: Add a `/` character to directory matches. | ||
|  | * `stat`: Set to true to stat *all* results.  This reduces performance. | ||
|  | * `silent`: When an unusual error is encountered when attempting to read a directory, a warning will be printed to stderr.  Set the `silent` option to true to suppress these warnings. | ||
|  | * `nodir`: Do not match directories, only files. | ||
|  | * `follow`: Follow symlinked directories. Note that requires to stat *all* results, and so reduces performance. | ||
|  | 
 | ||
|  | The following options apply only if `pattern` option is set, and are forwarded to `minimatch`: | ||
|  | * `dot`: Allow `pattern` to match filenames starting with a period, even if the pattern does not explicitly have a period in that spot. | ||
|  | * `noglobstar`: Disable `**` matching against multiple folder names. | ||
|  | * `nocase`: Perform a case-insensitive match.  Note: on case-insensitive filesystems, non-magic patterns will match by default, since `stat` and `readdir` will not raise errors. | ||
|  | * `matchBase`: Perform a basename-only match if the pattern does not  contain any slash characters.  That is, `*.js` would be treated as equivalent to `**/*.js`, matching all js files in all directories. | ||
|  | 
 | ||
|  | 
 | ||
|  | ## References
 | ||
|  | 
 | ||
|  | Unit-test set is based on [node-glob](https://www.npmjs.com/package/glob) tests. |