[6a3a178] | 1 | [![Build Status](https://travis-ci.org/isaacs/rimraf.svg?branch=master)](https://travis-ci.org/isaacs/rimraf) [![Dependency Status](https://david-dm.org/isaacs/rimraf.svg)](https://david-dm.org/isaacs/rimraf) [![devDependency Status](https://david-dm.org/isaacs/rimraf/dev-status.svg)](https://david-dm.org/isaacs/rimraf#info=devDependencies)
|
---|
| 2 |
|
---|
| 3 | The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.
|
---|
| 4 |
|
---|
| 5 | Install with `npm install rimraf`, or just drop rimraf.js somewhere.
|
---|
| 6 |
|
---|
| 7 | ## API
|
---|
| 8 |
|
---|
| 9 | `rimraf(f, [opts], callback)`
|
---|
| 10 |
|
---|
| 11 | The first parameter will be interpreted as a globbing pattern for files. If you
|
---|
| 12 | want to disable globbing you can do so with `opts.disableGlob` (defaults to
|
---|
| 13 | `false`). This might be handy, for instance, if you have filenames that contain
|
---|
| 14 | globbing wildcard characters.
|
---|
| 15 |
|
---|
| 16 | The callback will be called with an error if there is one. Certain
|
---|
| 17 | errors are handled for you:
|
---|
| 18 |
|
---|
| 19 | * Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
|
---|
| 20 | `opts.maxBusyTries` times before giving up, adding 100ms of wait
|
---|
| 21 | between each attempt. The default `maxBusyTries` is 3.
|
---|
| 22 | * `ENOENT` - If the file doesn't exist, rimraf will return
|
---|
| 23 | successfully, since your desired outcome is already the case.
|
---|
| 24 | * `EMFILE` - Since `readdir` requires opening a file descriptor, it's
|
---|
| 25 | possible to hit `EMFILE` if too many file descriptors are in use.
|
---|
| 26 | In the sync case, there's nothing to be done for this. But in the
|
---|
| 27 | async case, rimraf will gradually back off with timeouts up to
|
---|
| 28 | `opts.emfileWait` ms, which defaults to 1000.
|
---|
| 29 |
|
---|
| 30 | ## options
|
---|
| 31 |
|
---|
| 32 | * unlink, chmod, stat, lstat, rmdir, readdir,
|
---|
| 33 | unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync
|
---|
| 34 |
|
---|
| 35 | In order to use a custom file system library, you can override
|
---|
| 36 | specific fs functions on the options object.
|
---|
| 37 |
|
---|
| 38 | If any of these functions are present on the options object, then
|
---|
| 39 | the supplied function will be used instead of the default fs
|
---|
| 40 | method.
|
---|
| 41 |
|
---|
| 42 | Sync methods are only relevant for `rimraf.sync()`, of course.
|
---|
| 43 |
|
---|
| 44 | For example:
|
---|
| 45 |
|
---|
| 46 | ```javascript
|
---|
| 47 | var myCustomFS = require('some-custom-fs')
|
---|
| 48 |
|
---|
| 49 | rimraf('some-thing', myCustomFS, callback)
|
---|
| 50 | ```
|
---|
| 51 |
|
---|
| 52 | * maxBusyTries
|
---|
| 53 |
|
---|
| 54 | If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered
|
---|
| 55 | on Windows systems, then rimraf will retry with a linear backoff
|
---|
| 56 | wait of 100ms longer on each try. The default maxBusyTries is 3.
|
---|
| 57 |
|
---|
| 58 | Only relevant for async usage.
|
---|
| 59 |
|
---|
| 60 | * emfileWait
|
---|
| 61 |
|
---|
| 62 | If an `EMFILE` error is encountered, then rimraf will retry
|
---|
| 63 | repeatedly with a linear backoff of 1ms longer on each try, until
|
---|
| 64 | the timeout counter hits this max. The default limit is 1000.
|
---|
| 65 |
|
---|
| 66 | If you repeatedly encounter `EMFILE` errors, then consider using
|
---|
| 67 | [graceful-fs](http://npm.im/graceful-fs) in your program.
|
---|
| 68 |
|
---|
| 69 | Only relevant for async usage.
|
---|
| 70 |
|
---|
| 71 | * glob
|
---|
| 72 |
|
---|
| 73 | Set to `false` to disable [glob](http://npm.im/glob) pattern
|
---|
| 74 | matching.
|
---|
| 75 |
|
---|
| 76 | Set to an object to pass options to the glob module. The default
|
---|
| 77 | glob options are `{ nosort: true, silent: true }`.
|
---|
| 78 |
|
---|
| 79 | Glob version 6 is used in this module.
|
---|
| 80 |
|
---|
| 81 | Relevant for both sync and async usage.
|
---|
| 82 |
|
---|
| 83 | * disableGlob
|
---|
| 84 |
|
---|
| 85 | Set to any non-falsey value to disable globbing entirely.
|
---|
| 86 | (Equivalent to setting `glob: false`.)
|
---|
| 87 |
|
---|
| 88 | ## rimraf.sync
|
---|
| 89 |
|
---|
| 90 | It can remove stuff synchronously, too. But that's not so good. Use
|
---|
| 91 | the async API. It's better.
|
---|
| 92 |
|
---|
| 93 | ## CLI
|
---|
| 94 |
|
---|
| 95 | If installed with `npm install rimraf -g` it can be used as a global
|
---|
| 96 | command `rimraf <path> [<path> ...]` which is useful for cross platform support.
|
---|
| 97 |
|
---|
| 98 | ## mkdirp
|
---|
| 99 |
|
---|
| 100 | If you need to create a directory recursively, check out
|
---|
| 101 | [mkdirp](https://github.com/substack/node-mkdirp).
|
---|