Manifest 契约规范
模块的 sapi/manifest.json 文件用于声明模块的基本信息、依赖关系、权限以及对外提供的 RPC 服务。平台 CLI、db-server 与开发扩展均基于该清单进行模块校验与加载。
在模块的 sapi/manifest.json 首行配置 $schema,可在编辑器中获取字段补全与校验:
v3 语义元数据目前没有公开的 JSON Schema,使用 v3 时可不设置 $schema。若第三方基岩版开发插件误将其识别为原版行为包 manifest 报错,可将该路径加入忽略列表。
1. 核心字段说明(v2 基线)
模块清单不再支持声明 canDisable 与 enabledByDefault。新安装的模块默认启用并允许服主禁用,启停由服主通过 sfmc mod enable 与 sfmc mod disable 控制并记录在 module-lock.json 中。
2. 权限声明语法(Permissions)
为保证数据安全,模块无法随意读写全部 SQLite 数据。db-server 会根据声明的权限生成带受限范围的访问 Token:
3. 跨模块服务声明(Services RPC)
模块之间禁止直接通过相对路径相互导入,需通过 RPC 机制调用:
- 服务名称唯一:所有已启用模块中,
provides的服务name必须全局唯一,出现同名会报错。 - 依赖完整性:所有声明在
requires中的服务,必须存在已启用的提供方模块,否则启动时报错。
4. Manifest v3 语义元数据(可选)
将 schemaVersion 设为 3 时,可额外配置 semantic 对象,为开发扩展、控制面板提供模块行为描述:
5. 已废弃与停用字段
以下字段已被严格禁用,如果在 manifest.json 中声明会导致校验失败并阻断加载:
启停控制字段(已停用)
- ❌
canDisable - ❌
enabledByDefault
说明:模块启停完全由服主通过 CLI 或管理接口控制,写入 module-lock.json。模块作者无需也不能在清单中强制指定启停策略。如果清单中包含这两个字段,SDK 校验和 db-server 均会报错并拒绝启动,升级或新建模块时请直接删除。
v1 历史字段(已废弃)
- ❌
routes、tables、migrations、seeds、handlers、events
说明:数据表的创建已统一收敛至模块主入口 lifecycle.init() 阶段,通过 db.defineTable 声明式完成。
6. 启动前校验规则
在启动 BDS 之前,平台会自动校验已安装模块的 manifest:
- 模块 ID 唯一性:检查是否存在重复的模块 ID。
- 依赖拓扑检查:解析模块依赖关系,检查是否存在循环依赖。
- 服务提供方检查:检查
services.requires中声明的服务是否有对应的启用模块提供。 - 权限范围检查:检查通配符权限是否合规。