145 lines
3 KiB
Markdown
145 lines
3 KiB
Markdown
|
[![build status](https://secure.travis-ci.org/choojs/findup.png)](http://travis-ci.org/choojs/findup)
|
||
|
@choojs/findup
|
||
|
=======
|
||
|
|
||
|
> This is a fork of [Filirom1/findup](https://github.com/Filirom1/findup), pending [#16](https://github.com/Filirom1/findup/pull/16).
|
||
|
|
||
|
### Install
|
||
|
|
||
|
```sh
|
||
|
npm install -g @choojs/findup
|
||
|
```
|
||
|
|
||
|
### Usage
|
||
|
|
||
|
Find up a file in ancestor's dir
|
||
|
|
||
|
|
||
|
.
|
||
|
├── config.json
|
||
|
└── f
|
||
|
└── e
|
||
|
└── d
|
||
|
└── c
|
||
|
├── b
|
||
|
│ └── a
|
||
|
└── config.json
|
||
|
|
||
|
### Options
|
||
|
|
||
|
- `maxdepth`: (Number, default -1) How far to traverse before giving up. If maxdepth is `-1`, then there is no limit.
|
||
|
|
||
|
#### Async
|
||
|
|
||
|
findup(dir, fileName, options, callback)
|
||
|
findup(dir, iterator, options, callback) with `iterator(dir, cb)` where cb only accept `true` or `false`
|
||
|
|
||
|
```js
|
||
|
var findup = require('@choojs/findup');
|
||
|
|
||
|
|
||
|
findup(__dirname + '/f/e/d/c/b/a', 'config.json', function(err, dir){
|
||
|
// if(e) e === new Error('not found')
|
||
|
// dir === '/f/e/d/c'
|
||
|
});
|
||
|
```
|
||
|
|
||
|
or
|
||
|
|
||
|
```js
|
||
|
findup(__dirname + '/f/e/d/c/b/a', function(dir, cb){
|
||
|
require('path').exists(dir + '/config.json', cb);
|
||
|
}, function(err, dir){
|
||
|
// if(e) e === new Error('not found')
|
||
|
// dir === '/f/e/d/c'
|
||
|
});
|
||
|
```
|
||
|
|
||
|
#### EventEmitter
|
||
|
|
||
|
findup(dir, fileName, options)
|
||
|
|
||
|
```js
|
||
|
var findup = require('@choojs/findup');
|
||
|
var fup = findup(__dirname + '/f/e/d/c/b/a', 'config.json');
|
||
|
```
|
||
|
|
||
|
findup(dir, iterator, options) with `iterator(dir, cb)` where cb only accept `true` or `false`
|
||
|
|
||
|
```js
|
||
|
var findup = require('@choojs/findup');
|
||
|
var fup = findup(__dirname + '/f/e/d/c/b/a', function(dir, cb){
|
||
|
require('path').exists(dir + '/config.json', cb);
|
||
|
});
|
||
|
```
|
||
|
|
||
|
findup return an EventEmitter. 3 events are emitted: `found`, `error`, `end`
|
||
|
|
||
|
`found` event is emitted each time a file is found.
|
||
|
|
||
|
You can stop the traversing by calling `stop` manually.
|
||
|
|
||
|
```js
|
||
|
fup.on('found', function(dir){
|
||
|
// dir === '/f/e/d/c'
|
||
|
fup.stop();
|
||
|
});
|
||
|
```
|
||
|
|
||
|
`error` event is emitted when error happens
|
||
|
|
||
|
```js
|
||
|
fup.on('error', function(e){
|
||
|
// if(e) e === new Error('not found')
|
||
|
});
|
||
|
```
|
||
|
|
||
|
`end` event is emitted at the end of the traversing or after `stop()` is
|
||
|
called.
|
||
|
|
||
|
```js
|
||
|
fup.on('end', function(){
|
||
|
// happy end
|
||
|
});
|
||
|
```
|
||
|
|
||
|
#### Sync
|
||
|
|
||
|
findup(dir, fileName)
|
||
|
findup(dir, iteratorSync) with `iteratorSync` return `true` or `false`
|
||
|
```js
|
||
|
var findup = require('@choojs/findup');
|
||
|
|
||
|
try{
|
||
|
var dir = findup.sync(__dirname + '/f/e/d/c/b/a', 'config.json'); // dir === '/f/e/d/c'
|
||
|
}catch(e){
|
||
|
// if(e) e === new Error('not found')
|
||
|
}
|
||
|
```
|
||
|
|
||
|
#### CLI
|
||
|
```js
|
||
|
npm install -g @choojs/findup
|
||
|
|
||
|
$ cd test/fixture/f/e/d/c/b/a/
|
||
|
$ findup package.json
|
||
|
/root/findup/package.json
|
||
|
```
|
||
|
|
||
|
Usage
|
||
|
|
||
|
```
|
||
|
$ findup -h
|
||
|
|
||
|
Usage: findup [FILE]
|
||
|
|
||
|
--name, -n The name of the file to found
|
||
|
--dir, -d The directoy where we will start walking up $PWD
|
||
|
--help, -h show usage false
|
||
|
--verbose, -v print log false
|
||
|
```
|
||
|
|
||
|
### LICENSE MIT
|
||
|
|
||
|
### Read the tests :)
|