@dingdao/psuip-render SDK 使用
PSUIP 渲染 SDK 提供在各主流前端框架中直接将 PSUIP 渲染为可交互 UI 的能力。本文介绍安装方式与在 Vue、React、Svelte 以及纯 HTML 环境中的最小示例。
安装
npm i @dingdao/psuip-render
# 或者
yarn add @dingdao/psuip-render
# 或者
pnpm add @dingdao/psuip-render快速开始
Vue
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { renderVueFromPSUIP } from '@dingdao/psuip-render/vue'
const psuip = ref(`
# 优雅青蓝卡片系列展示
## 设计特点
[icon:Abstract/ad-product]优雅青蓝卡片系列采用渐变背景、[icon:Base/home]精致装饰和层次化设计,[icon:Base/aiming]提供三种专业的内容展示方式。
[event:download][下载](https://github.com/example/edit)
<card:headerPrecentCard>
## 二、市场概述
AI-PC 概念自 2023 年由英特尔提出后,迅速引发行业关注
### 中国市场
<percentValue color={color.success.green6}>#### 15%</percentValue>
AI-PC 出货量
### 全球市场
#### 25%
AI-PC 渗透率
### 未来预测
#### 40%
预计增长率
</card:headerPrecentCard>
<card:headerCard background={color.success.green0}>
## 三、头部品牌分析
联想、苹果和荣耀作为 AI-PC 市场的头部品牌,各自凭借独特的产品功能和市场策略在竞争中占据一席之地。以下是联想、苹果和荣耀的销售份额占比。
[chart:barh|AI-PC 市场份额]
| 品牌 | 市场份额 | 增长率 |
|------|----------|--------|
| 联想 | 35% | +12% |
| 苹果 | 28% | +8% |
| 荣耀 | 18% | +15% |
[chart:grouped_line|心流指标趋势]
| 日期 | 心流满意度FSV | 心流专注值FFV | 心流效能值FEV |
| --- | --- | --- | --- |
| 2025-03-10 | 0.0 | 0.36 | 2.55 |
| 2025-03-11 | 0.0 | 0.41 | 2.22 |
| 2025-03-12 | 0.0 | 0.36 | 2.64 |
| 2025-03-13 | 0.0 | 0.32 | 2.94 |
[chart:pie|笔记本市场占比]
| 类型 | 占比 |
|------|------|
| 游戏本 | 40% |
| 轻薄本 | 35% |
| 工作站 | 25% |
</card:headerCard>
`)
const renderResult = ref<{ component: any, props: any } | null>(null)
const handleRender = async () => {
const result = await renderVueFromPSUIP(psuip.value, {})
renderResult.value = result
}
onMounted(() => {
handleRender()
})
</script>
<template>
<component v-if="renderResult" :is="renderResult.component" v-bind="renderResult.props" />
</template>
<style scoped>
</style>React
import { useState, useEffect } from 'react'
import { renderReactFromPSUIP } from '@dingdao/psuip-render/react'
import './App.css'
function App() {
const [psuip, setPsuip] = useState(`
# 优雅青蓝卡片系列展示
## 设计特点
[icon:Abstract/ad-product]优雅青蓝卡片系列采用渐变背景、[icon:Base/home]精致装饰和层次化设计,[icon:Base/aiming]提供三种专业的内容展示方式。
[event:download][下载](https://github.com/example/edit)
<card:headerPrecentCard>
## 二、市场概述
AI-PC 概念自 2023 年由英特尔提出后,迅速引发行业关注
### 中国市场
<percentValue color={color.success.green6}>#### 15%</percentValue>
AI-PC 出货量
### 全球市场
#### 25%
AI-PC 渗透率
### 未来预测
#### 40%
预计增长率
</card:headerPrecentCard>
<card:headerCard background={color.success.green0}>
## 三、头部品牌分析
联想、苹果和荣耀作为 AI-PC 市场的头部品牌,各自凭借独特的产品功能和市场策略在竞争中占据一席之地。以下是联想、苹果和荣耀的销售份额占比。
[chart:barh|AI-PC 市场份额]
| 品牌 | 市场份额 | 增长率 |
|------|----------|--------|
| 联想 | 35% | +12% |
| 苹果 | 28% | +8% |
| 荣耀 | 18% | +15% |
[chart:grouped_line|心流指标趋势]
| 日期 | 心流满意度FSV | 心流专注值FFV | 心流效能值FEV |
| --- | --- | --- | --- |
| 2025-03-10 | 0.0 | 0.36 | 2.55 |
| 2025-03-11 | 0.0 | 0.41 | 2.22 |
| 2025-03-12 | 0.0 | 0.36 | 2.64 |
| 2025-03-13 | 0.0 | 0.32 | 2.94 |
[chart:pie|笔记本市场占比]
| 类型 | 占比 |
|------|------|
| 游戏本 | 40% |
| 轻薄本 | 35% |
| 工作站 | 25% |
</card:headerCard>
`)
const [renderResult, setRenderResult] = useState<{ component: any, props: any } | null>(null)
const handleRender = async () => {
const result = await renderReactFromPSUIP(psuip, {})
setRenderResult(result)
}
useEffect(() => {
handleRender()
}, [])
return (
<>
{renderResult && <renderResult.component {...renderResult.props} />}
</>
)
}
export default AppSvelte
<script lang="ts">
import { onMount } from 'svelte'
import { renderSvelteFromPSUIP } from '@dingdao/psuip-render/svelte'
const psuip = `
# 优雅青蓝卡片系列展示
## 设计特点
[icon:Abstract/ad-product]优雅青蓝卡片系列采用渐变背景、[icon:Base/home]精致装饰和层次化设计,[icon:Base/aiming]提供三种专业的内容展示方式。
[event:download][下载](https://github.com/example/edit)
<card:headerPrecentCard>
## 二、市场概述
AI-PC 概念自 2023 年由英特尔提出后,迅速引发行业关注
### 中国市场
<percentValue color={color.success.green6}>#### 15%</percentValue>
AI-PC 出货量
### 全球市场
#### 25%
AI-PC 渗透率
### 未来预测
#### 40%
预计增长率
</card:headerPrecentCard>
<card:headerCard background={color.success.green0}>
## 三、头部品牌分析
联想、苹果和荣耀作为 AI-PC 市场的头部品牌,各自凭借独特的产品功能和市场策略在竞争中占据一席之地。以下是联想、苹果和荣耀的销售份额占比。
[chart:barh|AI-PC 市场份额]
| 品牌 | 市场份额 | 增长率 |
|------|----------|--------|
| 联想 | 35% | +12% |
| 苹果 | 28% | +8% |
| 荣耀 | 18% | +15% |
[chart:grouped_line|心流指标趋势]
| 日期 | 心流满意度FSV | 心流专注值FFV | 心流效能值FEV |
| --- | --- | --- | --- |
| 2025-03-10 | 0.0 | 0.36 | 2.55 |
| 2025-03-11 | 0.0 | 0.41 | 2.22 |
| 2025-03-12 | 0.0 | 0.36 | 2.64 |
| 2025-03-13 | 0.0 | 0.32 | 2.94 |
[chart:pie|笔记本市场占比]
| 类型 | 占比 |
|------|------|
| 游戏本 | 40% |
| 轻薄本 | 35% |
| 工作站 | 25% |
</card:headerCard>
`
let comp: any = null
let compProps: any = null
onMount(async () => {
const result = await renderSvelteFromPSUIP(psuip, {})
comp = result.component
compProps = result.props
})
</script>
<main>
{#if comp}
<svelte:component this={comp} {...compProps} />
{/if}
</main>
<style>
</style>HTML
// Node.js (ESM) 环境下将 PSUIP 文件渲染为 HTML 并写入磁盘
import { readFile, writeFile } from 'node:fs/promises'
import { renderHTMLFromPSUIP } from '@dingdao/psuip-render/html'
const psuip = await readFile(new URL('./example.psuip.md', import.meta.url), 'utf-8')
// 可选:传入渲染选项(所有方法均支持,见下文 RenderOptions)
const { html } = await renderHTMLFromPSUIP(psuip, {
// cardWidth: '960px',
// cardHeight: 'auto',
// themeColor: '#1677ff',
// scaleValue: '1'
})
await writeFile(new URL('./result.html', import.meta.url), html, 'utf-8')渲染选项(所有方法通用)
interface RenderOptions {
cardWidth?: string;
cardHeight?: string;
themeColor?: string;
scaleValue?: string;
}- cardWidth: 卡片容器宽度,例如
'960' - cardHeight: 卡片容器高度,例如
'600px' - themeColor: 主题主色(十六进制或 CSS 颜色值),用于品牌化
- scaleValue: 整体缩放比例,示例
'1'、'0.85'
常见问题
如果你使用的是 Vite,请确保依赖以 ESM 方式加载;如遇到类型报错,升级 TypeScript 至较新版本(建议 >= 5.3)。
Last updated on