进阶用法

深入了解 SDK 的高级功能和使用场景。

类型推导

SDK 提供了完整的 TypeScript 类型推导支持。通过 InferTemplateValueMap 类型,可以从 configJson 自动推导出运行时 valueMap 的类型。

import { defineTemplateConfig } from 'template-sdk/config'
import type { InferTemplateValueMap } from 'template-sdk'

const configJson = defineTemplateConfig({
  meta: { name: 'demo' },
  dataSchema: {
    fields: [
      { key: 'title', type: 'string', value: 'Hello' }
    ]
  }
})

// 自动推导类型
type ValueMap = InferTemplateValueMap<typeof configJson>
// { title: string }

配置校验

使用 validateTemplateConfig 函数可以在运行时校验配置是否符合规范。

import { validateTemplateConfig } from 'template-sdk'

const issues = validateTemplateConfig({
  dataSchema: {
    fields: [
      { key: 'title', type: 'string' }
    ]
  }
})

if (issues.length > 0) {
  console.error('配置校验失败', issues)
}

构建产物导出

SDK 提供了多个构建相关的工具函数,可以用于自定义构建流程。

buildTemplateValueMap

根据 configJson 构建 valueMap。

import { buildTemplateValueMap } from 'template-sdk'

const valueMap = buildTemplateValueMap(configJson)

buildTemplateArtifacts

构建完整的模板产物。

import { buildTemplateArtifacts } from 'template-sdk'

const artifacts = buildTemplateArtifacts(configJson)

buildTemplateJsonFiles

构建 JSON 文件产物。

import { buildTemplateJsonFiles } from 'template-sdk'

const files = buildTemplateJsonFiles(configJson)

嵌套数组取值

对于嵌套的数组字段,可以使用点路径语法进行读取。

configJson 示例

{
  "dataSchema": {
    "fields": [
      {
        "key": "sections",
        "type": "array",
        "value": [
          {
            "key": "section1",
            "type": "array",
            "value": [
              { "key": "item", "type": "string" }
            ]
          }
        ]
      }
    ]
  }
}

取值方式

const sections = useTemplateValue('sections')
const firstSection = useTemplateValue('sections[0]')
const nestedItem = useTemplateValue('sections[0].item')

媒体对象

image 和 video 字段在运行时返回的是媒体对象,而不是字符串路径。

{
  "url": "/assets/poster.png",   // 媒体 URL
  "alt": "海报图片",             // 替代文本
  "poster": "/assets/poster-thumb.png" // 视频封面
}

在模板中使用

<template>gt;
  <img :src="poster.url" :alt="poster.alt" />

  <video :src="trailer.url" :poster="trailer.poster">
  </video>
</template>

自定义构建配置

templateSdkPlugin 支持传入额外的构建配置选项。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import configJson from './src/template/config'
import { templateSdkPlugin } from 'template-sdk/vite'

export default defineConfig({
  plugins: [
    templateSdkPlugin({
      configJson
      // 可以添加更多配置选项
    }),
    vue()
  ]
})

调试技巧

在开发过程中,可以通过以下方式进行调试:

查看运行时值

const title = useTemplateValue('title', '')

// 在控制台查看
console.log('title value:', title.value)

查看生成的类型文件

SDK 会自动生成 .template-sdk/**/*.d.ts 文件,可以查看这些文件了解 SDK 生成的类型定义。