Skip to content

Manifest 规范

plugin.json 是插件的入口描述文件,平台安装、运行时加载、菜单同步、权益校验、移动端构建都依赖它。

最小示例

json
{
  "code": "demo-shop",
  "name": "演示商城",
  "version": "1.0.0",
  "kind": "app",
  "author": "Demo",
  "description": "商品、订单和移动端商城页面",
  "icon": "icon.png",
  "psr4": { "Plugin\\DemoShop\\": "app/" },
  "lifecycle": "Plugin\\DemoShop\\hooks\\Lifecycle",
  "entitlement": "demo-shop",
  "routes": {
    "tenantapi": "app/tenantapi/route.php",
    "api": "app/api/route.php"
  },
  "tenant": {
    "menus": [
      {
        "code": "demo-shop",
        "name": "演示商城",
        "path": "/demo-shop",
        "icon": "shopping-cart",
        "sort": 100
      },
      {
        "code": "demo-shop.product",
        "parent_code": "demo-shop",
        "name": "商品列表",
        "path": "/demo-shop/product",
        "component": "plugins/demo-shop/product"
      }
    ],
    "permissions": [
      { "code": "demo_shop.product.list", "name": "商品列表" },
      { "code": "demo_shop.product.store", "name": "新增商品" }
    ]
  },
  "uniapp": {
    "subpackage": "modules/demo-shop",
    "pages": [
      { "path": "pages/product-list/index", "title": "商品列表" }
    ],
    "allowHome": true,
    "allowTabBar": true
  }
}

基础字段

字段必填说明
code插件唯一标识,使用 kebab-case
name插件显示名称
version插件版本,建议使用语义化版本
kindappplugin
description插件介绍,展示在插件管理和插件中心
author作者或组织
icon图标路径,相对插件根目录
psr4PHP 命名空间映射,必须以 Plugin\\ 开头
lifecycle生命周期类
entitlement权益 code,默认等于 code
depends依赖插件 code 数组

路由字段

routes 可声明三类入口:

路由用途
tenantapi租户后台 API,会挂载租户认证、生命周期、权益和 RBAC
apiPC / 移动端公共 API,会挂载租户上下文和 API 权益
platformapi平台级扩展 API,仅用于平台能力扩展

插件路由文件只写裸路由,不要重复声明 /tenantapi/{code} 前缀。

租户菜单

kind=app 必须提供 tenant.menus。菜单会安装到租户后台,并用于生成动态路由。

字段说明
code菜单唯一 code
parent_code父级菜单 code,一级菜单不填
name菜单名称
path前端路由路径
component页面组件路径,插件页面使用 plugins/{code}/{view}
icon图标
sort排序

菜单 code 需要全局唯一,建议使用插件 code 作为前缀。

权限字段

tenant.permissions 用于同步租户 RBAC 权限点。权限 code 建议使用点分格式或下划线格式,并保持稳定。

json
{
  "tenant": {
    "permissions": [
      { "code": "demo_shop.product.list", "name": "商品列表" },
      { "code": "demo_shop.product.store", "name": "新增商品" },
      { "code": "demo_shop.product.update", "name": "编辑商品" },
      { "code": "demo_shop.product.destroy", "name": "删除商品" }
    ]
  }
}

前端按钮使用 v-has-perm 控制显示,后端仍必须做权限校验。

配置面板

能力插件可以通过 tenant.panels 暴露配置面板。它适合没有一级菜单,但需要租户配置的插件。

json
{
  "tenant": {
    "panels": [
      {
        "code": "demo-shop.settings",
        "name": "商城设置",
        "component": "plugins/demo-shop/settings"
      }
    ]
  }
}

移动端字段

uniapp 用于声明移动端分包:

字段说明
subpackage分包根路径,例如 modules/demo-shop
pages页面列表
allowHome是否允许作为首页入口
allowTabBar是否允许进入 TabBar 配置

移动端源码必须放在 server/plugins/{code}/uniapp/

废弃字段

以下旧字段会被校验拒绝:

  • admin.*
  • 顶层 menus
  • 顶层 permissions
  • mobile

请使用 tenant.menustenant.permissionsuniapp 替代。

基于 Apache-2.0 协议开源