valueMap 的角色

了解 valueMap 在 SDK 中的重要地位,以及为什么需要将"结构定义"和"运行时内容"彻底分离。

核心概念

valueMap 是 SDK 最重要的数据边界。它是 SDK 根据 configJson 生成的运行时快照,包含所有字段的当前值。

一句话总结: configJson 是源配置,valueMap 是运行时快照。模板项目开发阶段只维护 configJson,运行时只读取 valueMap。

数据边界划分

谁维护什么

文件 维护者 用途
configJson 模板作者 定义字段结构和默认值
valueMap.json SDK(构建时生成) 运行时读取的内容

SDK 自动生成

SDK 在开发和构建阶段根据 configJson 自动生成 valueMap:

┌─────────────────┐      SDK       ┌─────────────────┐
│                 │   ──────────>   │                 │
│   configJson    │   (构建时)       │   valueMap      │
│                 │                 │                 │
└─────────────────┘                 └─────────────────┘
     模板作者维护                       运行时读取

为什么需要分离

configJson 和 valueMap 分离的目的是把"结构定义"和"运行时内容"彻底分开。

保证不互相干扰

  • 模板作者:维护的配置结构不会被运行时回写
  • 平台侧:只需要替换 valueMap.json 就能改变页面展示内容

构建时和运行时一致性

SDK 使用同一套字段校验与默认值归一逻辑,确保:

  • 构建时的配置校验逻辑和运行时的取值逻辑完全一致
  • 不会出现"构建通过但运行出错"的情况

运行链路

SDK 的运行链路是固定的:

1

模板项目把 configJson 传给 templateSdkPlugin

在 vite.config.ts 中配置

2

插件生成 .template-sdk/**/*.d.ts 和产物

生成 config.json 和 valueMap.json

3

模板项目运行时只安装 TemplateSdk

在 main.ts 中调用 app.use(TemplateSdk)

4

TemplateSdk 自动读取配置和值映射

读取 ./config.json 和 ./assets/template-sdk/valueMap.json

5

页面组件通过 useTemplateValue 按路径读取

使用点路径如 title、timeline[0].phase 读取值

useTemplateValue 路径规则

useTemplateValue 只有一套路径语义:

  • 只接受点路径,例如 titletimeline[0].phase
  • 不接受以 / 开头的旧写法
  • 普通字段直接返回标量值
  • image/video 运行时统一读取为媒体对象
  • array 运行时读取为字段对象数组

路径示例

路径 说明
title 读取根级 string 字段
poster 读取根级 image 字段
timeline 读取根级 array 字段
timeline[0] 读取数组第一项
timeline[0].phase 读取数组第一项的 phase 子字段

产物结构

构建完成后,dist 目录中包含以下与 SDK 相关的文件:

dist/
├── config.json                              # 模板配置副本
└── assets/
    └── template-sdk/
        └── valueMap.json                    # 运行时值映射
            └── ...