rubick 的插件能力系统
rubickcore 可通过安装系统插件, 动态获得任何能力, 以此驱动 rubick 创造无限可能
rubick 的底层能力由以下系统插件提供:
- rubick-adapter-db 提供本地数据储存
- rubick-adapter-appsearch 提供系统应用搜索
- rubick-adapter-nut 提供模拟和截图功能
你可以使用 rubick-cli 来基于模版自动初始化项目
系统插件开发有以下几个约定:
- 系统插件需要在入口文件暴露为默认导出对象,且必须有几个生命周期函数:
函数名称 | 作用 |
---|---|
start | · 启动插件时被调用 |
stop | · 关闭插件时被调用 |
api | · 获取插件功能时调用 |
-
系统插件配置可在构造函数
constructor
中设置, 配置参数均为可选参数 -
插件包名前戳为
rubick-adapter-
不过这不会成为你编码的负担, 你可以像下面类例子里一样使用类型约束来获得自动提示
eg:
类写法:
export default class MyAdapter implements RubickAdapterClass<YourAPIInterface> {
constructor(options: { param?: string }) {
if (param === undefined) throw new Error('必选参数可以抛出异常进行处理')
this.options = options
}
// 通过 ctx 获得全局上下文
async start(ctx: Context) {}
async stop() {}
async api() {
return {
function1: async () => {},
function2: async () => {}
}
}
}
函数式写法:
export default function MyAdapter(options: {
param?: string
}): RubickAdapter<YourAPIInterface> {
return {
start: async (ctx: Context) => {},
stop: async () => {},
api: async () => {
return {
function1: async () => {},
function2: async () => {}
}
}
}
}
这里有一个基本使用示例
const { newAdapterHandler } = require('@rubickos/rubick-core')
const core = newAdapterHandler({
// 插件安装目录
baseDir: path.join(__dirname, './adapter')
})
从 npm
上安装插件
core.install(adapter1, adapter2, adapter3)
eg:
core.install('rubick-adapter-db')
卸载插件
core.uninstall(adapter1, adapter2, adapter3)
eg:
core.uninstall('rubick-adapter-db')
更新插件,需带具体的版本号
core.update(adapter1, adapter2, adapter3)
eg:
core.update('rubick-adapter-db@0.0.2')
搜索插件
core.search(adapter)
eg:
core.search('rubick-adapter-db')
获取插件能力
core.api(adapter)
eg:
core.api('rubick-adapter-db')
项目采用全自动化的代码检查与构建, 使用以下命令进行开发即可
Action | Command |
---|---|
Install | · pnpm i |
Build | · pnpm build |
Commit & Release | · pnpm ok |