manis
Version:
Find and read your configuration files recursively
209 lines (134 loc) • 4.64 kB
Markdown
Manis
==========
For build system plugins that need to fetch relative config files (like .fecsrc).
[](http://travis-ci.org/ecomfe/manis)
[](https://www.npmjs.com/package/manis)
[](https://coveralls.io/r/ecomfe/manis)
[](https://david-dm.org/ecomfe/manis)
## Install
```sh
npm install manis
```
## Usage
### Using `strip-json-comments`
```javascript
var Manis = require('manis');
var stripJSONComments = require('strip-json-comments');
var loader = function (text) {
return JSON.parse(stripJSONComments(text));
};
var manis = new Manis({
files: [
{
// just for example, it should be loaded as yaml in fact.
name: '.eslintrc',
get: function (json) {
return {eslint: json};
}
},
'.fecsrc',
{
name: 'package.json',
get: function (json) {
return json.fecs || {};
}
}
],
loader: loader
});
var options = manis.from('path/to/file.js');
// do something cool with options
```
#### NOTICE: the default loader strip comment after manis@0.3.0.
### Loading `.yml` with `js-yaml`
```javascript
var yaml = require('js-yaml');
var Manis = require('manis');
var loader = function (text) {
return yaml.load(text);
};
var manis = new Manis('.travis.yml', {loader: loader});
var options = manis.from('path/to/file.js');
// do something cool with options
```
#### NOTICE: the default loader used `js-yaml` to load YAML and JSON content after manis@0.3.0.
### With defaults
```javascript
var Manis = require('manis');
var manis = new Manis({
files: [
'.fecsrc',
{
name: 'package.json',
get: 'fecs'
}
]
});
manis.setDefault('default/path/to/config/fecs.json');
var options = manis.from('path/to/file.js');
// do something cool with options
```
### User config
```javascript
var Manis = require('manis');
var manis = new Manis({
files: [
'.fecsrc',
{
name: 'package.json',
get: 'fecs'
}
]
});
manis.setDefault('default/path/to/config/fecs.json');
// will find `~/.fecsrc`
manis.setUserConfig();
var options = manis.from('path/to/file.js');
// do something cool with options
```
### Within a gulp plugin
```javascript
var Manis = require('manis');
var map = require('map-stream');
module.exports = function MyGulpPlugin(options) {
var manis = new Manis('.fecsrc', options);
return map(function (file, cb) {
// get the options for this file specifically
var options = manis.from(file.path);
// do something cool
// send the file along
cb(null, file);
});
};
```
## API
### new Manis(string fileName[, Object options]);
### new Manis(string[] fileNames[, Object options]);
### new Manis(Object[] finderOptioins[, Object options]);
### new Manis(Object options);
### void Manis#setDefault(Object defaultValue);
### void Manis#setDefault(string filePath[, Object finderOptions]);
### void Manis#setUserConfig();
### void Manis#setUserConfig(Object userConfig);
### void Manis#setUserConfig(string userConfigPathOrName[, Object finderOptions]);
### Object Manis#from(string path);
### Manis.yaml;
Alias for `js-yaml` module.
### Object Manis.loader;
The default loader, parse JSON or YAML content with `js-yaml`.
### Object Manis#from(string path);
#### options
- `files`, Array or string, items could be string or Object.
- `loader`, Function,parser for config content.
- `lookup`, Boolean, Find all up-level config files. default is true.
- `merge`, Boolean, Merge all config objects. default is true.
- `cache`, Boolean, Cache config files. default is true.
- `rootName`, String, The name of flag when `enableRoot` set to true. default is 'root'.
- `enableRoot`, Boolean, Enable the root flag to stop lookup in up-level directory. default is false.
- `stopper`, Function, the predicate for stopping search. default is null.
#### finderOptions
- `name`, string, the file name to be searched.
- `loader`, Funtion, the same as options.loader above;
- `stopper`, Function, the predicate for stopping search.
- `get`, string or Function, the field name to retrieve from config object.
- `cache`, Boolean, Cache config files. default is true.