102 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
[](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).
 |