@bedrock/config-yaml

中文文档
4.7.0发布于 2026/10/12Apache-2.0ES Module近 30 天下载 3532

贝德洛克配置 YAML

中文使用文档
文档目录15 节
  1. 安装
  2. 国家预防机制
  3. 发展
  4. 使用量
  5. 核心配置
  6. App 配置
  7. 从环境变量装入
  8. 从压缩环境变量装入中
  9. 配置来源
  10. 配置值转换器
  11. 启用变形器
  12. 内建 env 变形器
  13. 写入变形器
  14. 其他设置
  15. 许可证

Bedrock YAML 配置 (@bedrock/config-yaml)

此模块将 YAML 配置合并到 bedrock.config. YAML 值 可以在应用程序模块配置后添加或覆盖值 贝德洛克 配置可以来自文件、环境变量或函数 由申请注册.

在没有环境配置或活动注册源的情况下,Bedrock读取 已配置 YAML 文件 。 如果这些文件丢失,则继续启动 应用程序的配置.

安装

这个软件需要并支持维持了最新版本的Node.js. 更新可能会去除对旧的未维护的平台版本的支持. 请使用 依赖版本锁定文件和测试以确保与此兼容 软件.

国家预防机制

通过国家预防机制安装:

npm install --save @bedrock/config-yaml

发展

在当地安装(用于开发):

git clone https://github.com/digitalbazaar/bedrock-config-yaml.git
cd bedrock-config-yaml
npm install

使用量

为了确保没有其他模块能够推翻YAML配置, bedrock-config-yaml 应该是上次导入 bedrock.start() 实值 电话 若为 bedrock-config-yaml 不是最后一个 bedrock-cli.parsed 或者说 bedrock.configure 事件处理器,将丢出一个可以防止 应用程序启动.

不同时应用两个独立的配置文件 bedrock 启动期间发生的事件 : core 财务报告和审定财务报表 app。 。 。 .

核心配置

这个 core 配置用于配置核心贝德罗克特性,例如: 工人人数或默认的日志。 这个 core 配置应用于 最后一个处理器 bedrock-cli.parsed 活动。 默认位置 页:1 core 配置为 : /etc/bedrock-config/core.yaml。 。 。 .

样本 core.yaml

core:
  workers: 2
loggers:
  console:
    bedrock:
      formatter: logstash

App 配置

这个 app 配置用于配置 Bedrock 应用程序/模块特性. 这个 app 配置由最后一个处理器应用 bedrock.configure 活动。 默认位置 app 配置为 : /etc/bedrock-config/app.yaml。 。 。 .

样本 app.yaml

test-bedrock-module:
  foo: fromYaml
  overwriteMe: fromYaml
another-bedrock-module:
  host: example.com
  port: 18443

从环境变量装入

可以装入配置 YAML 从一个 BEDROCK_CONFIG 环境 变量。 该值是整个YAML配置文件的基数64编码版本. 如果找到此变量, 将跳过基于文件系统配置设置 .

从压缩环境变量装入中

配置 YAML 也可以从 BEDROCK_CONFIG_GZIP 环境 变量。 值是整个 YAML 配置文件, gzipped 和 碱基64 已编码。 当配置被存储在有大小限制的地方时,这个是有用的, 例如AWS保密管理器秘密,将存储值限制在64 KB; YAML和PEM文本一般由大约3-4x压缩.

要产生一个值:

gzip -c config.yaml | base64

检查一个:

echo "$BEDROCK_CONFIG_GZIP" | base64 -d | gunzip

只有一个 BEDROCK_CONFIG_GZIP 或者说 BEDROCK_CONFIG 可能设定。 设置两者 模棱两可,启动时失败,而不是默默地忽略其中之一.

严格解码值:如果 BEDROCK_CONFIG_GZIP 设置但无效 gzip, a 启动失败 BEDROCK_CONFIG_GZIP is invalid 错误而不是 倒计时 BEDROCK_CONFIG时 BEDROCK_CONFIG_GZIP 是未设置的, BEDROCK_CONFIG 补给基地64编码为YAML.

配置来源

一个应用程序可以注册一个能加载其合并的YAML配置的函数. 导入 @bedrock/config-yaml 在调用前最后并注册该函数 bedrock.start()数字 :

import * as bedrock from '@bedrock/core';
import {readFile} from 'node:fs/promises';

// import application modules here

// load YAML after the application's configuration handlers
import {addConfigurationSource} from '@bedrock/config-yaml';

addConfigurationSource({
  name: 'deployment',
  getConfig: async () => readFile('/etc/deployment.yaml', 'utf8')
});

bedrock.start();

name 必须是独特的 getConfig 必须是函数。 函数返回 YAML 带一个 core 节,a app 或两者兼有:

core:
  core:
    workers: 1
app:
  server:
    port: 8080

每个功能在启动期间每个进程都称为一次. 贝德洛克在等着 函数,并对两个配置事件使用相同的解析文档. 适用 core 期间 bedrock-cli.parsed 财务报告和审定财务报表 app 期间 bedrock.configure。配置值变压器在这些部分工作.

来源按登记顺序合并。 后续源覆盖匹配 来自早先来源的数值。 返回时 null 或者说 undefined 以跳过源代码. 如果全部来源被跳过, Bedrock 将载入配置的 YAML 文件 。 如果有的话 BEDROCK_CONFIG 或者说 BEDROCK_CONFIG_GZIP 设定, Bedrock 使用该环境 不调用注册来源的配置 .

在配置加载前注册源 。 重复姓名和登记 在加载开始后,会引发错误。 丢出或返回无效的源 YAML停止启动.

配置值转换器

配置可以使用 变压器, (中文(简体) ), 答复 $NAME 键 :

database:
  password: {$SECRET: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:db-Ab1'}
  host: {$ENV: DB_HOST}
  port: {$ENV: {name: DB_PORT, type: number, default: 5432}}

同样的语法在JSON中有效,因为YAML是其中的一集:

{
  "database": {
    "host": {"$ENV": "DB_HOST"},
    "port": {"$ENV": {"name": "DB_PORT", "type": "number", "default": 5432}}
  }
}

指令是一个对象 仅限 键为 $ 然后是大写 变压器的名称。 只保留大写名称,所以 {$ref: ...}, (中文(简体) ), {$schema: ...},和 MongoDB 样式 {$gt: 5} 仍然是普通配置值。 A 类 指令密钥与其他密钥共享对象是一个错误并失败 负载而不是被默默地视为一个值.

指令在解析后解决,然后合并为 bedrock.config,也可能是aync, 这使得远程的外观像 上面的一个可能。 除了内在 env,该模块 变压器;应用程序自行提供. 一个没有使用配置的配置被解析 像以前一样合并.

启用变形器

变压器必须都是 登记 应用代码和 允许 以 页:1 config-yaml.transformers.allow 相会. 登记通常是一边的 导入的效果; 允许列表是实际打开的变压器 . 默认情况下, 绝不允许 :

import * as bedrock from '@bedrock/core';
// application code that registers `secret`, `ssm`, and `kms-decrypt`
import './lib/aws-transformers.js';
import '@bedrock/config-yaml';

// only these two may be used by a config; `true` allows all registered
bedrock.config['config-yaml'].transformers.allow = ['env', 'secret'];

未注册或不允许启动的变压器 作为未解决的对象留在配置中.

可能设置部署配置 config-yaml.transformers 本身,所以操作员 可以在不改变应用程序的情况下启用变压器:

config-yaml:
  transformers:
    allow: ['env']

使用配置符的设置,在同一指令之前使用 配置已解决, a core 配置的设置适用于 app 配置 跟着它.

因此,登记是安全边界:一个配置只能使 应用程序已经注册的变压器,以及 env 是唯一一个 本模块自行登记。 许可列表是操作切换 那个套.

内建 env 变形器

$ENV 读取环境变量。 它是默认注册的,但是,像任何 变压器,必须在允许列表中添加后才能被使用.

host: {$ENV: DB_HOST}                        # required; fails if unset
port: {$ENV: {name: DB_PORT, type: number}}  # string, number, boolean, json
debug: {$ENV: {name: DEBUG, type: boolean, default: false}}

除非 type 被赋予,所以 {$ENV: WORKERS} 产量 "2", (中文(简体) ), 没有 2。一个没有设置的变量 default 失败配置负载而不是 默默地变得 undefined。 。 。 .

$ENV 让控制配置的人读取 任意 环境变量和 把它放在任何配置中。 缩小范围:

config['config-yaml'].transformers.env.allow = ['DB_HOST', /^MYAPP_/];

写入变形器

import {registerTransformer, TransformError} from '@bedrock/config-yaml';

registerTransformer({
  name: 'secret',                 // used as `{$SECRET: ...}`
  kinds: ['scalar', 'mapping'],   // value shapes accepted; default: ['scalar']
  async transform({value, path, settings, configType, signal}) {
    return await fetchSecret(value, {signal});
  }
});

transform 接收指令的值为 value 并可以还原任何价值, 包括扩展为配置子树的对象。 它可能是同步或 并必须在 bedrock.start() 名为. settings 实值 这个变压器自己的配置,从 config-yaml.transformers.<name> - 说吧 同一个地方的内置 env 读取 env.allow 从.

指令可能是嵌入式的,最内向的,所以变压器总是得到 完全解析后输入 :

apiKey: {$BASE64: {value: {$SECRET: 'arn:aws:secretsmanager:...:b64-key-Ab1'}}}

变形器错误用变形器名称和配置路径报告,永远不要 值; 基本错误记录在 debug 换作水平。 A 类 变压器可能抛出一个 TransformError 以添加失败的原因, 这必须 不包含配置值或解密:

Failed to load config: config transformer "$ENV" at "database.host" requires
the "DB_HOST" environment variable, which is not set

其他设置

// bounds the whole resolution pass, so a hung lookup fails startup
config['config-yaml'].transformers.timeout = 30000;
// resolve identical directives, e.g. the same secret, once per load
config['config-yaml'].transformers.cache = true;

许可证

Apache 许可证,2.0版本 版权:2011-2026 Digital Bazaar, Inc.

其他贝德罗克图书馆可使用非商业许可证 诸如自学、研究、个人项目或评价目的. 见 Bedrock 非商业许可证 v1.0 详细情况.

商业许可证和通过联系获得支助 数字集市 支持@ digitalbazaar.com。 。 。 .

版本与发布记录

@bedrock/config-yaml 共发布 11 个版本,首次发布于 2022/04/04;过去 12 个月发布了 4 个版本。

版本发布日期距今
4.7.0latest2026/10/1226 天前
4.6.02026/08/242 个月前
4.5.02026/07/303 个月前
4.4.02026/06/244 个月前
4.3.32025/02/081.7 年前
4.3.22025/02/071.7 年前

关于 @bedrock/config-yaml 的常见问题

@bedrock/config-yaml 是什么?

贝德洛克配置 YAML

如何安装 @bedrock/config-yaml?

在项目目录运行 npm install @bedrock/config-yaml,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@bedrock/core(^6.3.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bedrock/config-yaml 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bedrock__config-yaml 是否存在。

@bedrock/config-yaml 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@bedrock/config-yaml 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bedrock/config-yaml 可以商用吗?

@bedrock/config-yaml 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bedrock/config-yaml 的下载量有多少?

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

@bedrock/config-yaml 还在维护吗?

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