Skip to content

manifest.json 详解

manifest.json 是插件的配置文件,放在插件根目录,定义了插件的基本信息、提供的指令、权限需求和行为模式。

完整字段说明

json
{
  "id": "my-plugin",
  "name": "我的插件",
  "version": "1.0.0",
  "description": "插件描述",
  "entry": "index.html",
  "icon": "icon.png",
  "type": "ui",
  "display_mode": "inline",
  "auto_detach": false,
  "devMode": false,
  "devServer": "http://localhost:5173",
  "commands": [...],
  "permissions": {...}
}

基础字段

字段类型必填说明
idstring插件唯一标识符,建议用小写字母和连字符,如 my-plugin
namestring插件显示名称
versionstring插件版本号,建议遵循 SemVer,如 1.0.0
descriptionstring插件描述
entrystring入口文件路径,UI 插件填 HTML 文件(如 index.html),脚本插件填 JS 文件
iconstring图标文件路径(相对于插件根目录),支持 PNG、SVG
type"ui" | "script"插件类型,默认 "ui"

显示模式

字段类型默认值说明
display_mode"inline" | "window""inline"插件默认显示方式
auto_detachbooleanfalseUI 插件是否始终在独立窗口中打开
terminate_on_bgbooleanfalse应用隐藏到后台时是否立即结束插件运行。对于节省资源的工具类插件建议开启
run_at_startupbooleanfalse是否随 Onin 主程序启动自动加载并运行插件

HTML UI 插件的后台入口约定

对于 HTML UI 插件,Onin 会固定查找 dist/background.js 作为后台入口脚本。这个文件通常由 scripts/build.mjssrc/plugin.ts 自动生成。

如果该文件缺失,常见表现是:

  • 插件设置按钮不显示
  • setup() 没有执行
  • command.handle() 没有注册
  • run_at_startup 看起来“没反应”

推荐采用单源码声明、双产物输出:一次构建同时产出页面和后台入口脚本:

json
{
  "scripts": {
    "build": "node ./scripts/build.mjs"
  }
}

发布前请直接解压 zip 检查 dist/background.js 是否存在。

开发模式

字段类型说明
devModeboolean是否启用开发模式,启用后从 devServer 加载
devServerstring开发服务器地址,如 http://localhost:5173

commands 指令列表

每个插件可以声明一组指令,用户在 Onin 搜索框输入关键词时触发:

json
{
  "commands": [
    {
      "code": "my-command",
      "name": "我的指令",
      "description": "指令描述(可选)",
      "keywords": [
        { "name": "keyword1" },
        { "name": "keyword2", "type": "prefix" }
      ],
      "matches": [
        {
          "type": "text",
          "name": "文本匹配",
          "description": "匹配选中文本",
          "min": 1
        }
      ]
    }
  ]
}

指令字段

字段类型说明
codestring指令唯一标识,在 command.handle 中用于区分指令
namestring指令显示名称
descriptionstring指令描述(可选)
keywordsarray触发关键词列表
matchesarray内容匹配规则(可选),用于文件/文本触发

关键词类型

type说明
"prefix"前缀匹配(默认),用户输入的文本以该关键词开头时触发
"fuzzy"模糊匹配
"exact"精确匹配

matches 匹配规则

type说明
"text"匹配选中的文本内容
"image"匹配选中的图片文件
"file"匹配选中的文件
"folder"匹配选中的文件夹
json
{
  "matches": [
    {
      "type": "file",
      "name": "处理图片",
      "extensions": [".png", ".jpg", ".webp"],
      "min": 1,
      "max": 10
    }
  ]
}

基于 MIT 协议发布