跳到文档正文

MIP DESKTOP · 扩展开发

Manifest 规范

通过清单声明扩展身份、入口、权限和贡献点。

更新于 约 3 分钟

manifest.json 是扩展包的入口契约。安装器根据它确认身份、入口与权限,页面和命令的命名也应与它保持一致。

必要字段

字段 用途与要求
schemaVersion 当前使用数字 1
id 全局唯一,使用小写字母、数字、点和连字符
displayName、publisher 面向用户的扩展名与发布者
version 扩展自身的 SemVer,例如 1.0.0
engines.desktop 目标 Desktop 产品版本范围,按实际发行版验证
engines.extensionApi 需要的扩展 API 版本范围
permissions 仅声明实际使用且被目标宿主支持的权限
contributes 页面、命令及其他支持的贡献点

只提供 WebView 的扩展可以省略 main。需要注册 Host 命令时,main 指向包内的 CommonJS .js 文件。

添加 Host 命令

下面的片段应合并到完整清单,不能单独作为安装包 Manifest:

JSON
{
  "main": "dist/extension.js",
  "activationEvents": ["onStartupFinished"],
  "permissions": ["webview"],
  "contributes": {
    "commands": [
      { "command": "mip.example.notes.open", "title": "打开便笺" }
    ]
  }
}

再在 Host 中注册同一个命令。清单声明用于宿主发现,运行时注册负责实际处理,两者不能互相替代。

命名与包内路径

扩展为 mip.example.notes 时,命令和 View 使用相同的命名空间,例如 mip.example.notes.open、mip.example.notes.home。

入口必须指向实际存在的包内相对文件;main、WebView 及其他资源不使用开发机绝对路径、file:// 或宿主开发服务器地址。HTML 内部的资源同样使用包内相对路径。

JSON
{
  "contributes": {
    "views": [
      {
        "id": "mip.example.notes.home",
        "title": "便笺示例",
        "type": "webview",
        "entry": "webviews/home/index.html"
      }
    ]
  },
  "webviews": {
    "mip.example.notes.home": "webviews/home/index.html"
  }
}

以上示例中的 views 与 webviews 需使用一致的 View ID 和入口路径。

版本与依赖

修复兼容问题提升 patch;增加兼容能力提升 minor;改变命令参数、存储格式或其他不兼容契约时提升 major,并提供迁移说明。

跨扩展调用公共命令前,应在 extensionDependencies 中声明目标扩展,并确认目标已经安装、启用且贡献该命令。不要用某个命令存在的假设替代依赖声明。

JSON
{
  "extensionDependencies": ["mip.example.shared"]
}

权限与发布字段

storage、webview、identity.read、http 等权限含义各不相同;页面入口可见不代表可以读取身份或调用后台。查看 权限与身份。

完整性和签名字段由匹配的发布工具生成,不手填伪值,也不把普通 ZIP 改名视为完成正式发布。安装、签名与实际版本的检查见 发布指南。

基础契约:Extension API 1.x;具体能力以目标 Desktop 发行版为准。