|
|
1 ano atrás | |
|---|---|---|
| .. | ||
| dist | 1 ano atrás | |
| LICENSE | 1 ano atrás | |
| README.md | 1 ano atrás | |
| package.json | 1 ano atrás | |
Smart Configuration Loader
.env support with dotenvpackage.json fileInstall package:
# npm
npm install c12
# yarn
yarn add c12
# pnpm
pnpm install c12
Import:
// ESM
import { loadConfig } from "c12";
// CommonJS
const { loadConfig } = require("c12");
Load configuration:
// Get loaded config
const { config } = await loadConfig({});
// Get resolved config and extended layers
const { config, configFile, layers } = await loadConfig({});
c12 merged config sources with unjs/defu by below order:
package.jsoncwdResolve configuration from this working directory. The default is process.cwd()
nameConfiguration base name. The default is config.
configNameConfiguration file name without extension. Default is generated from name (name=foo => foo.config).
Set to false to avoid loading the config file.
rcFileRC Config file name. Default is generated from name (name=foo => .foorc).
Set to false to disable loading RC config.
globalRCLoad RC config from the workspace directory and the user’s home directory. Only enabled when rcFile is provided. Set to false to disable this functionality.
dotenvLoads .env file if enabled. It is disabled by default.
packageJsonLoads config from nearest package.json file. It is disabled by default.
If true value is passed, c12 uses name field from package.json.
You can also pass either a string or an array of strings as a value to use those fields.
defaultsSpecify default configuration. It has the lowest priority and is applied after extending config.
defaultConfigSpecify default configuration. It is applied before extending config.
overridesSpecify override configuration. It has the highest priority and is applied before extending config.
jitiCustom unjs/jiti instance used to import configuration files.
jitiOptionsCustom unjs/jiti options to import configuration files.
envNameEnvironment name used for environment specific configuration.
The default is process.env.NODE_ENV. You can set envName to false or an empty string to disable the feature.
If resolved config contains a extends key, it will be used to extend the configuration.
Extending can be nested and each layer can extend from one base or more.
The final config is merged result of extended options and user options with unjs/defu.
Each item in extends is a string that can be either an absolute or relative path to the current config file pointing to a config file for extending or the directory containing the config file.
If it starts with either github:, gitlab:, bitbucket:, or https:, c12 automatically clones it.
For custom merging strategies, you can directly access each layer with layers property.
Example:
// config.ts
export default {
colors: {
primary: "user_primary",
},
extends: ["./theme"],
};
// config.dev.ts
export default {
dev: true,
};
// theme/config.ts
export default {
extends: "../base",
colors: {
primary: "theme_primary",
secondary: "theme_secondary",
},
};
// base/config.ts
export default {
colors: {
primary: 'base_primary'
text: 'base_text'
}
}
The loaded configuration would look like this:
{
dev: true,
colors: {
primary: 'user_primary',
secondary: 'theme_secondary',
text: 'base_text'
}
}
Layers:
[
{ config: /* theme config */, configFile: /* path/to/theme/config.ts */, cwd: /* path/to/theme */ },
{ config: /* base config */, configFile: /* path/to/base/config.ts */, cwd: /* path/to/base */ },
{ config: /* dev config */, configFile: /* path/to/config.dev.ts */, cwd: /* path/ */ },
]
Users can define environment-specific configuration using these config keys:
$test: {...}$development: {...}$production: {...}$env: { [env]: {...} }c12 tries to match envName and override environment config if specified.
Note: Environment will be applied when extending each configuration layer. This way layers can provide environment-specific configuration.
Example:
{
// Default configuration
logLevel: 'info',
// Environment overrides
$test: { logLevel: 'silent' },
$development: { logLevel: 'warning' },
$production: { logLevel: 'error' },
$env: {
staging: { logLevel: 'debug' }
}
}
corepack enable (use npm i -g corepack for Node.js < 16.10)pnpm installpnpm devMade with 💛 Published under MIT License.