commerce-app-business-config 是 Adobe Commerce 应用开发中的一个配置管理技能,用于管理 Adobe Commerce 应用中的自定义业务配置。当用户需要添加、修改或删除商家可配置的设置(配置字段等)时使用该技能。
用途:该技能向现有的 app.commerce.config.ts 文件中的 businessConfig.schema 数组添加或修改条目。schema 中的每个条目定义一个商家可配置的设置,Commerce Admin 会将其渲染为 UI 字段。其他扩展性领域(webhooks、events)通过各自的技能单独添加。
主要能力:
- 支持多种字段类型:list(列表)、text(文本)、password(密码)、email(邮箱)、url(网址)、tel(电话)、boolean(布尔值),以及 dynamicList(动态列表,选项在运行时通过接收 action 参数的工厂函数解析)。
- 对每种类型有严格的校验规则:name 必填且非空;type 必填;list 类型需要 selectionMode(single 或 multiple)和 options(每个选项需 label 和 value);password 默认值必须为空字符串以阻止配置中出现密钥;email 需为有效邮箱;url 需为有效绝对 URL;tel 需匹配指定正则;boolean 默认为 false;businessConfig.schema 必须至少包含一个字段,空数组会在构建时被拒绝。
- 运行时读取:通过 @adobe/aio-commerce-lib-config 库读取商家在 Commerce Admin 中设置的值,包括 initialize、getConfigurationByKey、getConfiguration、byCodeAndLevel 等 API。
- 作用域选择:支持 byCodeAndLevel("global", "global")(应用级)、byCodeAndLevel(storeCode, "store_view")(商店视图级)、byCode(storeCode)、byScopeId(scopeId),值会从父作用域继承。
- 密码字段处理:aio app build 首次遇到密码字段时自动生成 AIO_COMMERCE_CONFIG_ENCRYPTION_KEY 到 .env,运行时需在 action 的 ext.config.yaml 中将其作为输入接入,之后 getConfigurationByKey 会返回明文值。
使用方式: 前置条件:确认应用已脚手架化并初始化,需同时满足 app.commerce.config.ts 存在于项目根目录,以及项目已初始化(生成 src/commerce-extensibility-1/ 目录并安装 node_modules 中的 @adobe/aio-commerce-lib-app 依赖)。若缺少配置文件,需先调用 commerce-app-init;若配置存在但项目未初始化,需运行 npx @adobe/aio-commerce-lib-app init(该命令幂等)。 步骤一:理解意图,为每个要暴露的设置收集 name、type、label(可选)、description(可选)、默认值(可选)等信息;list 字段还需 selectionMode 和 options。 步骤二:按类型校验规则推导配置值,发现问题先向用户反馈。 步骤三:更新 app.commerce.config.ts,向顶层 businessConfig.schema 数组添加或合并,保留其他领域配置;若已有 businessConfig 键则追加而非替换。 步骤四:运行 npx @adobe/aio-commerce-lib-app init 注册扩展点,将 commerce/configuration/1 添加到 app.config.yaml 和 install.yaml,并安装 @adobe/aio-commerce-lib-config 依赖。 步骤五:运行 aio app build 验证配置是否有效,构建失败会指向有问题的字段。 运行时读取配置:使用 @adobe/aio-commerce-lib-config,在每次 action 调用中先用生成的 schema 初始化库,再调用配置读取 API。schema 由 aio app build 生成到 .generated/configuration-schema.json。
适用场景:需要在 Adobe Commerce 应用中为商家提供可配置设置(如 API 密钥、区域选择、调试模式开关、支付方式选择等)的开发场景。
限制:
- businessConfig.schema 空数组会被构建时拒绝。
- password 字段默认值必须为空字符串,任何非空默认值会被拒绝。
- list/single 类型的 default 必填,且必须精确匹配一个 option 的 value 字符串。
- 修改配置后需重新运行 aio app build 验证。
- 常见问题包括 list/single default 缺失、defineConfig not found(需确保 @adobe/aio-commerce-lib-app 已安装并从 @adobe/aio-commerce-lib-app/config 导入)。
完成 aio app build 后,可进一步调用 commerce-app-webhooks 添加 webhook 拦截器、commerce-app-eventing 添加事件订阅、commerce-app-admin-ui 扩展 Admin UI。