Spaces:
Running
Running
# 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](#loaders-example) 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 | |