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).
|
---|