zemd/easy-loader

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Easy loader

> Simple & lightweight configuration loader for every day usage.

Easy loader helps to organize configuration files with hierarchical structured data inside.

[![npm version](https://badge.fury.io/js/easy-loader.svg)](https://www.npmjs.com/package/easy-loader)
[![Build Status](https://travis-ci.org/zemd/easy-loader.svg?branch=master)](https://travis-ci.org/zemd/easy-loader)
[![Code Climate](https://codeclimate.com/github/zemd/easy-loader/badges/gpa.svg)](https://codeclimate.com/github/zemd/easy-loader)
[![CircleCI](https://circleci.com/gh/zemd/easy-loader/tree/master.svg?style=svg)](https://circleci.com/gh/zemd/easy-loader/tree/master)
[![dependencies:?](https://img.shields.io/david/zemd/easy-loader.svg)](https://david-dm.org/zemd/easy-loader)
[![devDependencies:?](https://img.shields.io/david/dev/zemd/easy-loader.svg?style=flat)](https://david-dm.org/zemd/easy-loader)
[![Greenkeeper badge](https://badges.greenkeeper.io/zemd/easy-loader.svg)](https://greenkeeper.io/)

## Installation

```bash
npm install easy-loader --save
```

or

```bash
yarn add easy-loader
```

## Usage

### Basic file structure

```
root
|- config
|--- default.js     // <-- optional file, but recommended to add here default values 
|--- development.js
|--- staging.js
|--- production.js
|- config.js        // <-- the only one file you rely on in your application
|- .localrc         // <-- possibly you've already been using 'rc' module
```

### Use configs in your app

Suppose you define your entry point for accessing configs `config.js`
```javascript
const optionalCustomOptions = {
 pattern: ['config/<%=NODE_ENV%>.js', 'configs/<%=NODE_ENV%>.js', '<%=NODE_ENV%>.js'],
 patternVars: { NODE_ENV: process.env.NODE_ENV || 'development' },
 patternDefaultVars: { NODE_ENV: 'default' },
 cwd: process.cwd(),
 useRC: true,
 rcOpts: { prefix: 'local' },
 mergeWithDefaults: true,
};
module.exports = require('easy-loader')(optionalCustomOptions);
```

And now you can use any of your config options from any place in your code, for example:

```javascript
const config = require('./path/to/config');
const pg = require('pg');

const pgClient = pg.Client(config('database.pg')); // also available by using dot notation like: config.database.pg
```

### Configuration

You may define different behavior to `easy-loader` by passing options from previous example.

`pattern` - array or string - template path to configuration files, should use lodash.template format

`patternVars` - object - contains all variables needed to be passed into pattern template

`patternDefaultVars` - object - same as `patternVars`, but contains values to reach default file

`cwd` - string - root directory where files are searching

`useRC` - boolean - whether or not to use `rc` library

`rcOpts` - object - currently `rcOpts.prefix` is used only, but can be extended in future

`mergeWithDefaults` - boolean - whether or not to merge values with content from default file

### Advanced usage

TODO:

## License

Easy loader is released under the MIT license.

## Donation

[![](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://www.patreon.com/red_rabbit)
[![](https://img.shields.io/badge/flattr-donate-yellow.svg)](https://flattr.com/profile/red_rabbit)