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.
		
		
		
		
			
				
					102 lines
				
				3.5 KiB
			
		
		
			
		
	
	
					102 lines
				
				3.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								[](https://travis-ci.org/isaacs/rimraf) [](https://david-dm.org/isaacs/rimraf) [](https://david-dm.org/isaacs/rimraf#info=devDependencies)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Install with `npm install rimraf`, or just drop rimraf.js somewhere.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`rimraf(f, [opts], callback)`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The first parameter will be interpreted as a globbing pattern for files. If you
							 | 
						||
| 
								 | 
							
								want to disable globbing you can do so with `opts.disableGlob` (defaults to
							 | 
						||
| 
								 | 
							
								`false`). This might be handy, for instance, if you have filenames that contain
							 | 
						||
| 
								 | 
							
								globbing wildcard characters.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The callback will be called with an error if there is one.  Certain
							 | 
						||
| 
								 | 
							
								errors are handled for you:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
							 | 
						||
| 
								 | 
							
								  `opts.maxBusyTries` times before giving up, adding 100ms of wait
							 | 
						||
| 
								 | 
							
								  between each attempt.  The default `maxBusyTries` is 3.
							 | 
						||
| 
								 | 
							
								* `ENOENT` - If the file doesn't exist, rimraf will return
							 | 
						||
| 
								 | 
							
								  successfully, since your desired outcome is already the case.
							 | 
						||
| 
								 | 
							
								* `EMFILE` - Since `readdir` requires opening a file descriptor, it's
							 | 
						||
| 
								 | 
							
								  possible to hit `EMFILE` if too many file descriptors are in use.
							 | 
						||
| 
								 | 
							
								  In the sync case, there's nothing to be done for this.  But in the
							 | 
						||
| 
								 | 
							
								  async case, rimraf will gradually back off with timeouts up to
							 | 
						||
| 
								 | 
							
								  `opts.emfileWait` ms, which defaults to 1000.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## options
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* unlink, chmod, stat, lstat, rmdir, readdir,
							 | 
						||
| 
								 | 
							
								  unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    In order to use a custom file system library, you can override
							 | 
						||
| 
								 | 
							
								    specific fs functions on the options object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    If any of these functions are present on the options object, then
							 | 
						||
| 
								 | 
							
								    the supplied function will be used instead of the default fs
							 | 
						||
| 
								 | 
							
								    method.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Sync methods are only relevant for `rimraf.sync()`, of course.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    For example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ```javascript
							 | 
						||
| 
								 | 
							
								    var myCustomFS = require('some-custom-fs')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    rimraf('some-thing', myCustomFS, callback)
							 | 
						||
| 
								 | 
							
								    ```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* maxBusyTries
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered
							 | 
						||
| 
								 | 
							
								    on Windows systems, then rimraf will retry with a linear backoff
							 | 
						||
| 
								 | 
							
								    wait of 100ms longer on each try.  The default maxBusyTries is 3.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Only relevant for async usage.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* emfileWait
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    If an `EMFILE` error is encountered, then rimraf will retry
							 | 
						||
| 
								 | 
							
								    repeatedly with a linear backoff of 1ms longer on each try, until
							 | 
						||
| 
								 | 
							
								    the timeout counter hits this max.  The default limit is 1000.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    If you repeatedly encounter `EMFILE` errors, then consider using
							 | 
						||
| 
								 | 
							
								    [graceful-fs](http://npm.im/graceful-fs) in your program.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Only relevant for async usage.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* glob
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Set to `false` to disable [glob](http://npm.im/glob) pattern
							 | 
						||
| 
								 | 
							
								    matching.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Set to an object to pass options to the glob module.  The default
							 | 
						||
| 
								 | 
							
								    glob options are `{ nosort: true, silent: true }`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Glob version 6 is used in this module.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Relevant for both sync and async usage.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* disableGlob
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Set to any non-falsey value to disable globbing entirely.
							 | 
						||
| 
								 | 
							
								    (Equivalent to setting `glob: false`.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## rimraf.sync
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It can remove stuff synchronously, too.  But that's not so good.  Use
							 | 
						||
| 
								 | 
							
								the async API.  It's better.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## CLI
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If installed with `npm install rimraf -g` it can be used as a global
							 | 
						||
| 
								 | 
							
								command `rimraf <path> [<path> ...]` which is useful for cross platform support.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## mkdirp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you need to create a directory recursively, check out
							 | 
						||
| 
								 | 
							
								[mkdirp](https://github.com/substack/node-mkdirp).
							 |