主题
插件清单详解
清单是 Host 了解插件的唯一入口。它应该是多行、可读、可审查的 JSON,而不是压缩成一行。
一个完整示例
{
"id": "example.blog-model",
"name": "Example Blog Model",
"version": "1.0.0",
"api_version": 1,
"runtime": "executable",
"commands": {
"cl": "blog-model.exe",
"g": "blog-model.exe",
"d": "blog-model.exe"
},
"capabilities": [
"project-model",
"content",
"pages"
],
"permissions": [
"project-read",
"project-write"
]
}
字段解释
id:稳定唯一的插件身份。name:显示名称。version:插件自己的版本。api_version:它支持的 luox 插件协议版本。runtime:插件如何运行。commands:命令到发布入口的映射。capabilities:插件提供的能力。permissions:插件需要的权限。
依赖和配置 schema 可以继续加入 dependencies、config_schema、assets、license、homepage 和 repository。增加字段时要保持向后兼容,破坏性变化应提升 api_version。
常见错误
- 把 package.json 当成 plugin.json:文件名和扫描规则要分开。
- 命令入口写成开发机绝对路径:发布时路径应相对于插件目录。
- 直接把 Rust trait object 放进 DLL 接口:原生边界只能使用稳定 C ABI。
- 清单声明了 capability 却没有对应实现:加载时应尽早报错。
- 多个插件注册同一命令:用户必须明确选择,不能依赖目录遍历顺序。