preview-runtime.md 2.6 KB

预览中心与运行时

预览中心分类

src/plugins/preview.vue 当前按下面规则分类:

  • basic -> 基础功能分组区
  • tvtstore 未声明 -> caseCenter
  • tvtstore 已声明且插件名以 zone 开头 -> zoneEditor
  • tvtstore 已声明且插件名不以 zone 开头 -> Tvtstore

计数方式:

  • basic 汇总所有 child[].preview.length
  • 其他分类使用顶层 preview.length

两条不同的线上数据链路

不要把下面两条远程链路混为一谈:

  1. menuSetup

    • 从 src/app.jsx 触发
    • 开发环境下 FES_APP_PLUGINS=true 时执行,或显式开启 FES_APP_ONLINE_API 时执行
    • 作用是徽标、筛选、编辑器标记等标签型元数据
  2. getOnlinePluginConfig()

    • 从 src/plugins/preview.vue 触发
    • 只在开发环境且未设置 FES_APP_PLSNAME 时执行,或显式开启 FES_APP_ONLINE_API 时执行
    • 作用是把线上发布菜单补充合并到本地预览配置

线上菜单合并规则

getOnlinePluginConfig() 的范围是收敛过的:

  • 跳过 basic
  • 跳过已声明 tvtstore 的插件
  • 始终以本地配置为事实源
  • 仅给已有本地插件追加缺失的预览项
  • 只有本地不存在该插件时,才整项补进来
  • 线上新增的条目会标记 waitForGit

这意味着插件市场和区域编辑器条目即使线上存在数据,也仍以本地配置为准。

预览卡片行为

行为由 cardList.vue、oneImageQr.vue、suspenseLayout.vue 共同决定:

  • type: img -> 图片卡片
  • type: text -> 文本卡片
  • type: video -> 视频卡片
  • 有 url -> 直接跳转到声明目标
  • 没有 url -> 跳本地 /plugins/... 路由
  • disableFPSGraph -> 在路由预览页隐藏 FPS 面板
  • disableSrcBtn -> 在路由预览页隐藏源码按钮
  • referenceSource -> 在路由预览页显示参考出处

二维码与外链预览

oneImageQr.vue 只有在具备线上 API 相关行为时才会显示二维码浮层。

需要注意:

  • 某些外链 url 会刻意跳过二维码预览,例如插件市场和 bilibili 链接
  • 即便是 url 型条目,也仍然需要稳定的 name
  • 远程 https://... 预览图是合法用法

搜索、哈希与筛选

这些交互要视为正式行为,不是偶然实现:

  • 左侧菜单点击后滚动到对应分区
  • 路由 hash 会同步更新
  • 页面初始化时会根据 hash 定位
  • 关键字搜索会筛选插件标题和预览标题或名称
  • 复选筛选来源于 menuSetup
  • editor 标签主要改变卡片侧的行为,不会重写插件结构本身