rubick/assets/js/9.3b2c34da.js
2023-08-02 16:03:41 +08:00

1 line
27 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(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}}]);