用途:在创建、修改或调试 Nemo 插件(原生或 WASM)时使用,提供扩展模型、API、生命周期与构建方面的模式参考。
三层扩展模型:XML 声明式、Rhai 脚本(轻量逻辑,受限沙箱,无 I/O,含操作数、字符串、数组与调用栈限制)、WASM 插件(内存隔离、基于能力)、原生插件(无沙箱,仅 Rust 安全性,适合性能敏感与后台线程)。
PluginContext API:所有插件运行时可用 get_data/set_data、emit_event、get_config、log,以及读写组件属性。PluginValue 为 Null、Bool、Integer、Float、String、Array、Object 枚举。
原生插件:Cargo.toml 中 crate-type 必须为 ["cdylib"],依赖 nemo-plugin-api;在 lib.rs 用 declare_plugin! 声明,通过 registrar 注册数据源、转换、动作,可用 std::thread::spawn 后台产数据。构建命令:cargo build -p my-plugin --release。生命周期:加载器扫描 .dylib/.so/.dll,加载库、调用 manifest、调用入口完成注册并启动。
WASM 插件:crate-type 同样为 cdylib,依赖 nemo-wasm-guest 与 wit-bindgen;实现 get_manifest、init、tick,tick 返回下次调用间隔毫秒(0 停止)。构建命令:cargo component build -p my-wasm-plugin --release。无线程,由宿主驱动 tick。
Rhai 脚本:事件处理器统一签名为 fn name(component_id, event_data) 两字符串参数,on-load 以 component_id="app"、event_data="load" 派发。提供数据、组件、HTTP(同步阻塞)、JSON、数学、字符串与日志函数。
能力与权限:Capability 含 Component、DataSource、Transform、Action、EventHandler;PluginPermissions 含 network、filesystem、system、data_read/write、component_read/write、event_emit。权限、收费与部署细节以官方资料为准,本文未提供完整 Pricing 与平台要求。