mirror of
https://github.com/rubickCenter/rubick
synced 2025-09-10 20:56:54 +08:00
1 line
27 KiB
JavaScript
1 line
27 KiB
JavaScript
(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{282:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"插件说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#插件说明"}},[t._v("#")]),t._v(" 插件说明")]),t._v(" "),s("p",[s("code",[t._v("rubick")]),t._v(" 插件分为 "),s("code",[t._v("UI插件")]),t._v(" 和 "),s("code",[t._v("系统插件")]),t._v(" 2类。下面分别介绍这 2 类插件的区别和作用。")]),t._v(" "),s("ol",[s("li",[t._v("UI 插件 "),s("Badge",{attrs:{type:"tip",text:"最常用"}}),t._v(":都会有 UI 界面,用于和用户交互,且需要通过关键词搜索选择进行使用,比如 "),s("code",[t._v("斗图")]),t._v(" 插件,有界面展示,且需要再搜索框内搜索关键词选择后进行呼起才能使用。")],1),t._v(" "),s("li",[t._v("系统插件:可能不会有 UI 界面,在 "),s("code",[t._v("rubick")]),t._v(" 启动的时候,会注册执行系统插件。比如"),s("code",[t._v("超级面板")]),t._v(" 插件,安装完成后,即可在 "),s("code",[t._v("rubick")]),t._v(" 运行时随时使用,不需要任何关键词和匹配。")])]),t._v(" "),s("h2",{attrs:{id:"开发-ui-插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#开发-ui-插件"}},[t._v("#")]),t._v(" 开发 UI 插件")]),t._v(" "),s("p",[t._v("一个最基础插件的目录是这样的:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("rubick-plugin-demo\n |-- index.html\n |-- package.json\n |-- preload.js\n")])])]),s("h3",{attrs:{id:"文件说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#文件说明"}},[t._v("#")]),t._v(" 文件说明")]),t._v(" "),s("h4",{attrs:{id:"package-json"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#package-json"}},[t._v("#")]),t._v(" package.json")]),t._v(" "),s("p",[t._v("用于指定插件最基础的配置,一个最基础的配置信息如下:")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rubick-ui-plugin-demo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pluginName"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"插件demo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rubick ui 插件demo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"author"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"muwoo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"main"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index.html"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"logo"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://www.img/demo.png"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"preload"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"preload.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"homePage"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://gitee.com/rubick-center/rubick-ui-plugin-demo/raw/master/README.md"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pluginType"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ui"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"features"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"code"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"explain"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"测试插件"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"cmds"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"demo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"测试"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("核心字段说明:")]),t._v(" "),s("ul",[s("li",[t._v("name: 插件 "),s("code",[t._v("npm")]),t._v(" 包名称,"),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("pluginName: 插件显示名称,用于展示给使用者 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("description: 插件描述,描述这个插件的作用 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("author: 插件作者")]),t._v(" "),s("li",[t._v("main: 入口文件,一般为 "),s("code",[t._v("index.html")])]),t._v(" "),s("li",[t._v("logo: 尺寸建议 200 * 200, 插件的 logo, 需要是 http/https 在线地址,不支持本地logo "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("version: 插件的版本 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("preload: 预加载脚本")]),t._v(" "),s("li",[t._v("homePage: 插件 readme raw 地址")]),t._v(" "),s("li",[t._v("pluginType: 插件类型,枚举:ui, system. 当前选 ui "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("features: 插件核心功能列表 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("features.code: 插件某个功能的识别码,可用于区分不同的功能 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("features.explain: 插件某个功能的解释 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("features.cmds: 输入框内搜索该 cmd 进入插件 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1)]),t._v(" "),s("h4",{attrs:{id:"index-html"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#index-html"}},[t._v("#")]),t._v(" index.html")]),t._v(" "),s("p",[t._v("插件的入口文件,用于展示插件的样式,一个最基础的 "),s("code",[t._v("html")]),t._v(" 结构可以是这样:")]),t._v(" "),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token doctype"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<!")]),s("span",{pre:!0,attrs:{class:"token doctype-tag"}},[t._v("DOCTYPE")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token name"}},[t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n hello Rubick\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("showNotification"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("通知"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("button")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'showNotification'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'click'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("showNotification")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),s("h4",{attrs:{id:"preload-js"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#preload-js"}},[t._v("#")]),t._v(" preload.js")]),t._v(" "),s("p",[t._v("细心的同学可能已经注意到上面的 "),s("code",[t._v("index.html")]),t._v(" 使用了一个全局函数 "),s("code",[t._v("showNotification")]),t._v(" 那么这个函数是在哪里定义的呢?\n答案就是在 "),s("code",[t._v("preload.js")]),t._v(" 里面。"),s("code",[t._v("preload.js")]),t._v(" 可以为页面提供全局函数")]),t._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("showNotification")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n rubick"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("showNotification")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'HI, rubick'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("rubick 更多支持 API 能力参考:"),s("a",{attrs:{href:"https://github.com/rubickCenter/rubick/blob/master/static/preload.js#L49",target:"_blank",rel:"noopener noreferrer"}},[t._v("rubick 全局API"),s("OutboundLink")],1)]),t._v(" "),s("h3",{attrs:{id:"测试写好的插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#测试写好的插件"}},[t._v("#")]),t._v(" 测试写好的插件")]),t._v(" "),s("p",[t._v("由于 "),s("code",[t._v("rubick")]),t._v(" 插件是基于 "),s("code",[t._v("npm")]),t._v(" 的管理方式,所以开发者调试插件,也是基于 "),s("code",[t._v("npm")]),t._v(" 的软连接的方式进行调试。\n首先需要再插件 "),s("code",[t._v("package.json")]),t._v(" 目录下执行:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("link")]),t._v("\n")])])]),s("p",[t._v("然后将插件通过插件市场的 "),s("code",[t._v("开发者")]),t._v(" 菜单进行安装,填写插件的 "),s("code",[t._v("name")]),t._v(" 即可,如果插件需要调试,可以通过右上角 ... 来打开开发者工具进行调试,页面变更直接刷新即可:")]),t._v(" "),s("p",[s("img",{attrs:{src:"https://pica.zhimg.com/80/v2-d7d6d5cba1151527aeff8e2c9b8cefb4_720w.gif",alt:""}})]),t._v(" "),s("p",[t._v("本小节所有代码:"),s("a",{attrs:{href:"https://gitee.com/rubick-center/rubick-ui-plugin-demo",target:"_blank",rel:"noopener noreferrer"}},[t._v("rubick-ui-plugin-demo"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"开发系统插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#开发系统插件"}},[t._v("#")]),t._v(" 开发系统插件")]),t._v(" "),s("p",[t._v("一个最基础插件的目录是这样的:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("rubick-system-plugin-demo\n |-- package.json\n |-- index.js\n")])])]),s("h3",{attrs:{id:"文件说明-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#文件说明-2"}},[t._v("#")]),t._v(" 文件说明")]),t._v(" "),s("h4",{attrs:{id:"package-json-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#package-json-2"}},[t._v("#")]),t._v(" package.json")]),t._v(" "),s("p",[t._v("用于指定插件最基础的配置,一个最基础的配置信息如下:")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rubick-system-plugin-demo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pluginName"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rubick 系统插件demo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rubick 系统插件demo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"entry"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index.js"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"logo"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://xxxx/upload/202112/08/5bac90649c5343cabb63930b131cf8e6.png"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"pluginType"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"system"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"author"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"muwoo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"homepage"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("核心字段说明:")]),t._v(" "),s("ul",[s("li",[t._v("name: 插件 "),s("code",[t._v("npm")]),t._v(" 包名称,"),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("pluginName: 插件显示名称,用于展示给使用者 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("description: 插件描述,描述这个插件的作用 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("author: 插件作者")]),t._v(" "),s("li",[t._v("entry: 入口文件,一般为 "),s("code",[t._v("index.js")])]),t._v(" "),s("li",[t._v("logo: 尺寸建议 200 * 200, 插件的 logo, 需要是 http/https 在线地址,不支持本地logo "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("version: 插件的版本 "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1),t._v(" "),s("li",[t._v("homePage: 插件 readme raw 地址")]),t._v(" "),s("li",[t._v("pluginType: 插件类型,枚举:ui, system. 当前选 system "),s("Badge",{attrs:{type:"tip",text:"必填"}})],1)]),t._v(" "),s("h4",{attrs:{id:"index-js"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#index-js"}},[t._v("#")]),t._v(" index.js")]),t._v(" "),s("p",[t._v("插件的入口文件,用于 rubick 主进程进行加载执行:")]),t._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("exports")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onReady")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("ctx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Notification "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ctx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Notification")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("title")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"测试系统插件"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("body")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"这是一个系统插件,在rubick运行时,立即被加载"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("show")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("code",[t._v("index.js")]),t._v(" 需要返回一个包含 "),s("code",[t._v("onReady")]),t._v(" 生命周期的函数,该函数接受 "),s("code",[t._v("ctx")]),t._v(" 对象作为参数,我们可以通过 "),s("code",[t._v("ctx")]),t._v(" 使用 "),s("code",[t._v("electron")]),t._v(" 主进程所有能力。\n同时也为 "),s("code",[t._v("ctx")]),t._v(" 上扩展挂在了 "),s("code",[t._v("mainWindow")]),t._v(" 对象。")]),t._v(" "),s("h4",{attrs:{id:"调试插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#调试插件"}},[t._v("#")]),t._v(" 调试插件")]),t._v(" "),s("p",[t._v("由于 "),s("code",[t._v("rubick")]),t._v(" 插件是基于 "),s("code",[t._v("npm")]),t._v(" 的管理方式,所以开发者调试插件,也是基于 "),s("code",[t._v("npm")]),t._v(" 的软连接的方式进行调试。\n首先需要再插件 "),s("code",[t._v("package.json")]),t._v(" 目录下执行:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("link")]),t._v("\n")])])]),s("p",[t._v("然后将插件通过插件市场的 "),s("code",[t._v("开发者")]),t._v(" 菜单进行安装,填写插件的 "),s("code",[t._v("name")]),t._v(" 即可。由于插件依赖于主进程启动执行,所以安装完成后需要重启 rubick 后才能生效。")]),t._v(" "),s("p",[s("img",{attrs:{src:"https://pic3.zhimg.com/80/v2-e218500a0686a8735d80f417aa53b7aa_720w.gif",alt:""}})]),t._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),s("p",[t._v("系统插件目前无法直接通过 "),s("code",[t._v("devtools")]),t._v(" 进行调试,后面会进行优化")])]),t._v(" "),s("h2",{attrs:{id:"发布插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#发布插件"}},[t._v("#")]),t._v(" 发布插件")]),t._v(" "),s("p",[t._v("这里介绍完了如何开发插件,最后非常欢迎为 "),s("code",[t._v("rubick")]),t._v(" 贡献开源插件,发布插件也非常简单,首先需要把自己的插件发布到 "),s("code",[t._v("npm")]),t._v(" 仓库:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" publish\n")])])]),s("p",[t._v("然后再给 "),s("a",{attrs:{href:"https://gitcode.net/rubickcenter/rubick-database/-/blob/master/plugins/total-plugins.json",target:"_blank",rel:"noopener noreferrer"}},[t._v("rubick-database/plugins/total-plugins.json"),s("OutboundLink")],1),t._v(" 仓库提个 "),s("code",[t._v("pull request")]),t._v(", 把你的 "),s("code",[t._v("package.json")]),t._v(" 信息加入 "),s("code",[t._v("json")]),t._v(" 文件内,等我们 merge 了您的提交,插件将会自动上架。")])])}),[],!1,null,null,null);s.default=e.exports}}]); |