Put configuration files in config
which is at project root dir.
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)
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 inNamespace Order
.config/*.EXT
is the highest priority configuration, follows theNamespace 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 asjson5
.
import config from 'config-json5'
config.Customer.dbConfig
config.get('Customer.dbConfig')
config.has('Customer.dbConfig')
You can use custom dirname
or env
to manage your configuration.
module1/config
module1/config/index.js
module1/config/default.js
module1/config/index.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.
export default (arg1, arg2 ...argN) => ({
Customer: {
arg1: arg1
}
})
Import from your export code.
import config from './module1/config'
config.Customer.dbConfig
config.get('Customer.dbConfig')
config.has('Customer.dbConfig')
Configurations can be split in chunks.
// 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
// @.json
{
"logger": {
"level": "info"
},
"domain": "docs.config-json5.org"
}
// @app.json
{
"name": "test",
"port": 1234
}
// @database.json
{
"username": "root",
"password": "1234"
}