1 |
3a515b92
|
cagy
|
[![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).
|