@ekino/config

中文文档
0.7.1发布于 2026/07/10MITTypeScriptESM + CJS构建来源已验证近 30 天下载 1.2万

由yaml提供动力的轻量级配置模块

中文使用文档
文档目录7 节
  1. 动机
  2. 安装
  3. 巨钩
  4. 使用量
  5. 环境变量覆盖
  6. CONF FILES 覆盖
  7. 继承模式

@ekino/ 配置

NPM version Coverage Status

一个由Yaml提供动力的轻量级/倾斜型/横向配置模块.

动机

为什么另一个Node.js配置包?

这是我们在开始这个模块前 问自己一个问题, 我们想要简单的配置管理 具有以下特性:

  • 简单使用
  • 小脚印
  • 同质配置文件格式
  • 没有全局/ 特定/ 前配置模块可以装入( 例如需要 lib, 配置它, 然后直接使用软件包 )
  • 人类可读性
  • 简洁
  • 评论
  • 类型
  • 覆盖
  • 信封变量支持

有几个模块已经存在,但是没有一个模块符合我们的要求, 有些过于有限,而另一些则在我们看来非常膨胀.

我们选择了Yaml 因为它会自动满足几个要求, 它比起json简洁,你可以添加注释,它支持类型 读起来非常容易 Yaml还提供其他精致的功能 例如 锚。 。 。 .

我们只支持 Yaml 配置文件,有一个项目与 json, (中文(简体) ), xml, (中文(简体) ), toml, (中文(简体) ), ini, (中文(简体) ), properties,只是没有规模 当工作大的项目, 每个人添加它最喜欢的口味.

然后我们用环境变量来加载 覆盖或定义一些特定的密钥, 很容易根据环境来调整你的配置 你跑不动 单行代码甚至配置文件. 严重使用多克时真的很方便.

我们用这个代码跨过几个项目(一个小文件,目前由~100 loc组成), 并在需要时加以改进.

我们到了! 它现在开源 我们希望它能帮助别人 像它为我们所做的那样 造出令人惊叹的东西.

安装

使用 pnpm : pnpm add @ekino/config

或npm: (中文(简体) ) npm install @ekino/config

巨钩

此软件包通过设置来配置寄存器的本地 Git 钩 :

core.hooksPath = ./.githooks

在安装过程中会自动做到这一点,以确保为贡献者持续启用Git钩.

使用量

由于这个模块非常依赖 环境变量你可以读 这个 如果你对她们不满意的话.

默认情况下,本模块假设配置文件位于您当前工作目录的根( Q)process.cwd()) (中文(简体) ). 然而,您可以用相对路径或绝对路径在其它任何地方加载文件 :


├─ conf/
├─ base.yaml # the base configuration
├─ env_mapping.yaml # defines mapping between env vars and config keys
└─ dev.yaml # Optional file loaded if CONF_FILES includes `dev`

base.yaml 它定义了您应用程序的共同基本配置.

然后在代码中获取一个配置密钥值 :

# /conf/base.yaml
host: base.config.io
external_api:
    key: xxxxx
// test.js
const config = require('@ekino/config')
console.log(config.get('host'))
console.log(config.get('external_api.key'))

如果我们运行这个剧本,我们将有:

node test.js
> base.config.io
> xxxxx

环境变量覆盖

有时您想要在特定环境中覆盖一个单一的值, 因此本模块提供 一个特殊文件,名为 env_mapping.yaml,它允许根据 环境可变值.

假设有以下配置文件:

# /conf/base.yaml
host: base.config.io
external_api:
    key: xxxxx
# /conf/env_mapping.yaml
HOST: host
API_KEY: external_api.key

和以下代码:

// test.js
const config = require('@ekino/config')
console.log(config.get('host'))
console.log(config.get('external_api.key'))

如果我们运行这个剧本,我们将有:

node test.js
> base.config.io
> xxxxx

HOST=staging.config.io API_KEY=12345 node test.js
> staging.config.io
> 12345

第二次运行输出了不同的值,因为我们绘制了 HOST 财务报告和审定财务报表 API_KEY 环境变量 页:1 host 财务报告和审定财务报表 external_api.key 使用配置密钥 env_mapping.yaml。 。 。 .

环境变量可能很方便,但是当从节点读到它们时, 我们总是会得到一个字符串, 例如,在处理布尔值时,这可能很烦人. 因此,可以选择性地强制集合环境变量值的类型:

# /conf/env_mapping.yaml
PORT:
    key: port
    type: number
USE_SSL:
    key: use_ssl
    type: boolean
TAGS:
    key: tags
    type: array

我们支持 number, (中文(简体) ), boolean 财务报告和审定财务报表 array 类型. 对于 array 类型,环境可变值应为逗号分隔字符串: TAGS="foo,bar,fizz,buzz" 将被投给 ['foo', 'bar', 'fizz', 'buzz']。 。 。 .

CONF FILES 覆盖

如果你有一堆变化 取决于环境 你运行你的应用, 定义其中的数十个地图可能很麻烦 env_mapping.yaml 文档.

此模块赋予您根据 CONF_FILES 环境可变值。 文件在 CONF_FILES 以同样的顺序装入, 这样 CONF_FILES=google,extra,它会装入 /conf/google.yaml,则 /conf/extra.yaml。 。 。 . 文件路径既可以是相对的(与CONF DIR Direct),也可以是绝对的.

假设我们有这些配置文件:

# /conf/base.yaml
service: awesome
host: base.config.io
port: 8080
# /conf/prod.yaml
host: prod.config.io
port: 8081
# /conf/aws.yaml
host: prod.aws.config.io
# /conf/google.yaml
host: prod.google.config.io
# /conf/extra.yaml
port: 8082

和以下代码:

// test.js
const config = require('@ekino/config')
console.log(config.get('service'))
console.log(config.get('host'))
console.log(config.get('port'))

如果我们运行这个剧本,我们将有:

node test.js
> awesome         # from base.yaml
> base.config.io  # from base.yaml
> 8080            # from base.yaml

CONF_FILES=prod node test.js
> awesome         # from base.yaml
> prod.config.io  # from prod.yaml
> 8081            # from prod.yaml

CONF_FILES=prod,aws node test.js
> awesome             # from base.yaml
> prod.aws.config.io  # from aws.yaml
> 8081                # from prod.yaml

CONF_FILES=prod,google node test.js
> awesome                # from base.yaml
> prod.google.config.io  # from google.yaml
> 8081                   # from prod.yaml

CONF_FILES=prod,google,extra node test.js
> awesome                # from base.yaml
> prod.google.config.io  # from google.yaml
> 8082                   # from extra.yaml

:警告: env_mapping.yaml 将永远优先于文件覆盖.

继承模式

base.yaml <— [<CONF_FILES>.yaml] <— [env_mapping.yaml]

所有文件被包围 [] 是可选的.

  1. 装入配置从 <CONF_DIR>/base.yaml
  2. 若为 CONF_FILES 定义,如果每个对应文件存在,则加载
  3. 若为 <CONF_DIR>/env_mapping.yaml 已存在, 并且一些环境变量匹配, 覆盖这些值

版本与发布记录

@ekino/config 共发布 7 个版本,首次发布于 2017/06/10;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.7.1latest2026/07/104 个月前
0.7.02026/06/264 个月前
0.6.32020/01/166 年前
0.5.02019/12/196 年前
0.3.02017/10/139 年前
0.2.02017/06/239 年前

关于 @ekino/config 的常见问题

@ekino/config 是什么?

由yaml提供动力的轻量级配置模块

如何安装 @ekino/config?

在项目目录运行 npm install @ekino/config,或使用 pnpm add / yarn add / bun add。

@ekino/config 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ekino/config 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@ekino/config 可以商用吗?

@ekino/config 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ekino/config 的下载量有多少?

根据 npm 官方下载统计,@ekino/config 在 2026/10/13 – 2026/11/11 这 30 天内被下载 12,195 次,日均约 407 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ekino/config 还在维护吗?

最新版本 0.7.1 发布于 2026/07/10(4 个月前);至今共发布 7 个版本,其中过去 12 个月发布了 2 个;首次发布于 2017/06/10。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。