119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Lilconfig ⚙️
 | 
						|
[](https://badge.fury.io/js/lilconfig)
 | 
						|
[](https://packagephobia.now.sh/result?p=lilconfig)
 | 
						|
[](https://coveralls.io/github/antonk52/lilconfig)
 | 
						|
 | 
						|
A zero-dependency alternative to [cosmiconfig](https://www.npmjs.com/package/cosmiconfig) with the same API.
 | 
						|
 | 
						|
## Installation
 | 
						|
 | 
						|
```sh
 | 
						|
npm install lilconfig
 | 
						|
```
 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
```js
 | 
						|
import {lilconfig, lilconfigSync} from 'lilconfig';
 | 
						|
 | 
						|
// all keys are optional
 | 
						|
const options = {
 | 
						|
    stopDir: '/Users/you/some/dir',
 | 
						|
    searchPlaces: ['package.json', 'myapp.conf.js'],
 | 
						|
    ignoreEmptySearchPlaces: false
 | 
						|
}
 | 
						|
 | 
						|
lilconfig(
 | 
						|
    'myapp',
 | 
						|
    options // optional
 | 
						|
).search() // Promise<LilconfigResult>
 | 
						|
 | 
						|
lilconfigSync(
 | 
						|
    'myapp',
 | 
						|
    options // optional
 | 
						|
).load(pathToConfig) // LilconfigResult
 | 
						|
 | 
						|
/**
 | 
						|
 * LilconfigResult
 | 
						|
 * {
 | 
						|
 *   config: any; // your config
 | 
						|
 *   filepath: string;
 | 
						|
 * }
 | 
						|
 */
 | 
						|
```
 | 
						|
 | 
						|
## Difference to `cosmiconfig`
 | 
						|
Lilconfig does not intend to be 100% compatible with `cosmiconfig` but tries to mimic it where possible. The key differences are:
 | 
						|
- **no** support for yaml files out of the box(`lilconfig` attempts to parse files with no extension as JSON instead of YAML). You can still add the support for YAML files by providing a loader, see an [example](#yaml-loader) below.
 | 
						|
- **no** cache
 | 
						|
 | 
						|
### Options difference between the two.
 | 
						|
 | 
						|
|cosmiconfig option      | lilconfig |
 | 
						|
|------------------------|-----------|
 | 
						|
|cache                   | ❌        |
 | 
						|
|loaders                 | ✅        |
 | 
						|
|ignoreEmptySearchPlaces | ✅        |
 | 
						|
|packageProp             | ✅        |
 | 
						|
|searchPlaces            | ✅        |
 | 
						|
|stopDir                 | ✅        |
 | 
						|
|transform               | ✅        |
 | 
						|
 | 
						|
## Loaders examples
 | 
						|
 | 
						|
### Yaml loader
 | 
						|
 | 
						|
If you need the YAML support you can provide your own loader
 | 
						|
 | 
						|
```js
 | 
						|
import {lilconfig} from 'lilconfig';
 | 
						|
import yaml from 'yaml';
 | 
						|
 | 
						|
function loadYaml(filepath, content) {
 | 
						|
    return yaml.parse(content);
 | 
						|
}
 | 
						|
 | 
						|
const options = {
 | 
						|
    loaders: {
 | 
						|
        '.yaml': loadYaml,
 | 
						|
        '.yml': loadYaml,
 | 
						|
        // loader for files with no extension
 | 
						|
        noExt: loadYaml
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
lilconfig('myapp', options)
 | 
						|
    .search()
 | 
						|
    .then(result => {
 | 
						|
        result // {config, filepath}
 | 
						|
    });
 | 
						|
```
 | 
						|
 | 
						|
### ESM loader
 | 
						|
 | 
						|
Lilconfig v2 does not support ESM modules out of the box. However, you can support it with a custom a loader. Note that this will only work with the async `lilconfig` function and won't work with the sync `lilconfigSync`.
 | 
						|
 | 
						|
```js
 | 
						|
import {lilconfig} from 'lilconfig';
 | 
						|
 | 
						|
const loadEsm = filepath => import(filepath);
 | 
						|
 | 
						|
lilconfig('myapp', {
 | 
						|
    loaders: {
 | 
						|
        '.js': loadEsm,
 | 
						|
        '.mjs': loadEsm,
 | 
						|
    }
 | 
						|
})
 | 
						|
    .search()
 | 
						|
    .then(result => {
 | 
						|
        result // {config, filepath}
 | 
						|
 | 
						|
        result.config.default // if config uses `export default`
 | 
						|
    });
 | 
						|
```
 | 
						|
 | 
						|
## Version correlation
 | 
						|
 | 
						|
- lilconig v1 → cosmiconfig v6
 | 
						|
- lilconig v2 → cosmiconfig v7
 |