# config-json5

> configuration control with namespaces and yaml/json5/js

Latest version **1.4.11** (published 2022-03-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install config-json5
pnpm add config-json5
yarn add config-json5
bun add config-json5
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.4.11 |
| Published | 2022-03-23 |
| First published | 2019-06-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=10 |
| Dependencies | 3 |
| Unpacked size | 22.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | somewind |
| Maintainers | somewind |
| Keywords | config-json5, config, json5, yaml, node |

## Links

- npm: https://www.npmjs.com/package/config-json5
- Repository: https://github.com/somewind/config-json5
- Issues: https://github.com/somewind/config-json5/issues
- npm.io page: https://npm.io/package/config-json5

## Dependencies (3)

- [json5](https://npm.io/package/json5.md) ^2.1.0
- [lodash](https://npm.io/package/lodash.md) ^4.17.13
- [js-yaml](https://npm.io/package/js-yaml.md) ^3.13.1

## Alternatives

- [monaco-yaml](https://npm.io/package/monaco-yaml.md) — 420.1K weekly downloads
- [@crewx/workflow](https://npm.io/package/@crewx/workflow.md) — 3.1K weekly downloads
- [yaml-cat](https://npm.io/package/yaml-cat.md) — 38 weekly downloads
- [nunjucks-in-yaml](https://npm.io/package/nunjucks-in-yaml.md) — 9 weekly downloads
- [shopify-symlinks](https://npm.io/package/shopify-symlinks.md) — 3 weekly downloads

## Recent versions

- 1.4.11 (latest) — 2022-03-23
- 1.4.10 — 2022-02-09
- 1.4.9 — 2021-09-09
- 1.4.8 — 2021-05-17
- 1.4.7 — 2020-06-04
- 1.4.6 — 2020-06-04
- 1.4.5 — 2020-06-04
- 1.4.4 — 2020-06-04
- 1.4.3 — 2019-10-21
- 1.3.3 — 2019-10-14
- 1.3.2 — 2019-09-25
- 1.3.1 — 2019-09-24
- 1.3.0 — 2019-09-24
- 1.2.0 — 2019-09-23
- 1.1.0 — 2019-09-18
- … 6 more at https://npm.io/package/config-json5/versions

## README

# config-json5

## Simple Usage

### Configuration files

Put configuration files in `config` which is at project root dir.

```js
config/advanced/com/somewind/default.js
config/advanced/com/default.js
config/advanced/com/somewind.json
config/advanced/com.somewind/default.js
config/advanced/com.somewind/domain1.dev.json
config/advanced/com.somewind/domain1.js
config/advanced/com.somewind/domain2.json
config/advanced/com.somewind.json
config/advanced/default.js
config/default.json
config/default.json5
```

When `process.env.NODE_ENV` is `com.somewind.domain1.dev` or `domain1.dev`, it will merge the following configurations in a top-down order.(use `lodash.merge`, array is override)

```js
config/advanced/default.js
config/advanced/com/default.js
config/advanced/com/somewind.json
config/advanced/com.somewind.json
config/advanced/com/somewind/default.js
config/advanced/com.somewind/default.js
config/advanced/com.somewind/domain1.js
config/advanced/com.somewind/domain1.dev.json
config/default.json5
config/default.json
```

Note: 

* `config/advanced` is the advanced configuration, it overwrites step by step in `Namespace Order`.
* `config/*.EXT` is the highest priority configuration, follows the `Namespace Order`, and overrides the advanced configuration
* Same filename with different file ext, priority order is `yaml > json > json5 > js`.
* Different file paths, priority order is `. > /`
* `json` ext file format is same as `json5`.

### Import

```js
import config from 'config-json5'

config.Customer.dbConfig
config.get('Customer.dbConfig')
config.has('Customer.dbConfig')
```

## Custom Export

You can use custom `dirname` or `env` to manage your configuration.

```js
module1/config
module1/config/index.js
module1/config/default.js
```

`module1/config/index.js`

```js
import config from 'config-json5'
// option dirname, must be fullpath or [fullpath0, fullpath1, ...]
// option env, default is process.env.NODE_ENV
export default config.parse(__dirname, process.env.TARGET, [arg1, arg2, ...argN])
```

Use parameter in config file.

```js
export default (arg1, arg2 ...argN) => ({
  Customer: {
    arg1: arg1
  }
})
```

Import from your export code.

```js
import config from './module1/config'

config.Customer.dbConfig
config.get('Customer.dbConfig')
config.has('Customer.dbConfig')
```

## Config Split

Configurations can be split in chunks.

```js
// default.json
{
  "app": {
    "name": "test",
    "port": 1234
  },
  "database": {
    "username": "root",
    "password": "1234"
  },
  "logger": {
    "level": "info"
  },
  "domain": "docs.config-json5.org"
}
```

`default.json` can be split into the following files

```js
// @.json
{
  "logger": {
    "level": "info"
  },
  "domain": "docs.config-json5.org"
}

// @app.json
{
  "name": "test",
  "port": 1234
}

// @database.json
{
  "username": "root",
  "password": "1234"
}
```


## License

[MIT](./LICENSE)

---
_Source: https://npm.io/package/config-json5 · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
