# 模式三:Vue3+TypeScript 模板模式 — 完整工作流
# 版本:1.0.0 | 更新日期:2026-06-09
# 适用:熟悉现代前端工具链的开发者
# 模板地址:https://github.com/MiegoLive/dimsum-chat-vue3-ts-template
# 耗时:约 1-4 小时
================================================================
模式三概述
================================================================
本模式适用于有现代前端开发经验的开发者。使用官方 Vue3+TypeScript 模板,
提供完整的工程化开发体验:
- Vue 3.5+ +
{{ item.name }}
```
注意:
- TransitionGroup 的 name="list" 对应 CSS 中的 .list-enter-active 等动画类
- v-html 用于渲染 getCommentHTML 返回的 HTML(已转义,安全)
- customWsServer 在开发环境指定本机端口,生产环境自动检测
--- 第 6 步:添加新页面(可选)---
如果开发者需要多个页面(如弹幕页 + 礼物特效页):
6.1 在 guide.dimsum.json 中添加页面:
```json
{
"pages": [
{ "name": "弹幕", "path": "?danmu", "width": 1920, "height": 1080 },
{ "name": "礼物特效", "path": "?gift", "width": 1920, "height": 1080 }
]
}
```
6.2 在 App.vue 中添加路由:
```vue
```
6.3 创建新组件 src/components/GiftEffect.vue。
--- 第 7 步:开发与测试 ---
```bash
# 启动开发服务器(HMR 热更新)
pnpm run dev
# 默认运行在 http://localhost:5173/
# 在浏览器中测试:
# http://localhost:5173/?danmu
# 如果需要连接主程序 WebSocket:
# 确保主程序运行在 13500 端口
# 模板已配置开发环境自动连接 ws://localhost:13500/websocket
```
--- 第 8 步:构建与打包 ---
```bash
# 类型检查 + 构建
pnpm run build
# 仅打包 .ds 文件
pnpm run dimsum:pack
# 一键构建 + 打包(推荐)
pnpm run dimsum:build-pack
```
输出文件:pack/{name}_ver{version}.ds
打包原理(dimsum.pack.js):
1. 读取 dist/guide.dimsum.json 中的 name 和 version
2. 将 dist/ 目录内容压缩为 ZIP(最高压缩级别)
3. 输出为 .ds 文件
--- 第 9 步:安装测试 ---
1. 打开点心 Chat 主程序
2. 「我的应用」→ 安装 .ds 文件
3. 连接直播间
4. 浏览器打开弹幕页面验证效果
5. 检查所有页面是否正常
--- 第 10 步:常见问题 ---
构建失败(vue-tsc 报错)
→ 检查 TypeScript 语法错误
→ 运行 pnpm install 确保依赖安装完整
开发环境 WebSocket 连不上
→ 确认主程序在 13500 端口运行
→ 检查 customWsServer 配置
打包后无法加载
→ 确认 vite.config.ts 的 base 与 guide.dimsum.json 的 base 一致
样式不生效
→ 检查 CSS 是否使用 scoped
→ 清除浏览器缓存
表情/贴纸不显示
→ 使用 parser.getCommentHTML() 而非 parser.comment
→ 确认网络可访问 CDN
================================================================
模式三高级扩展
================================================================
11.1 国际化(i18n)
在 public/ 目录创建语言文件:
```
public/
├── guide.dimsum.json ← 默认语言
├── guide.dimsum.zh-CN.json ← 简体中文
└── guide.dimsum.ja-JP.json ← 日语
```
只需翻译 name、description、pages[].name、pages[].description。
11.2 控制台 + 显示层分离
```json
{
"pages": [
{
"name": "控制台",
"path": "?ctrl",
"width": 400,
"height": 800,
"description": "添加到 OBS 自定义停靠窗口"
},
{
"name": "显示层",
"path": "?danmu",
"width": 1920,
"height": 1080
}
]
}
```
控制台通过 DimSumChatCallMessageRequest 跨 Widget 通信控制显示层。
完整的跨组件通信指南(含配置、发送、接收代码)请查阅 shared.txt 第九节。
以下仅为快速示例:
```javascript
// === 控制台端 ===
import { WebSocketManager, onMessage } from 'dimsum-chat'
onMessage((msg, parser) => {
if (msg.type === 'DimSumChatCallMessageRequest') {
console.log('收到回复:', msg.content.requestData)
}
}, { widgetNickName: '控制台' })
function sendToDisplay(action, params = {}) {
WebSocketManager.getInstance().send({
type: 'DimSumChatCallMessageRequest',
content: { targetNickName: '显示层', requestData: { action, params } }
})
}
// === 显示层端(另一个 HTML 页面)===
import { onMessage } from 'dimsum-chat'
onMessage((msg, parser) => {
// 接收来自控制台的指令
if (msg.type === 'DimSumChatCallMessageRequest') {
const { action, params } = msg.content.requestData
switch (action) {
case 'showDanmaku': /* 处理 */ break
case 'toggleVisibility': /* 处理 */ break
}
}
}, { widgetNickName: '显示层' })
```
11.4 CDN 容错加载
```typescript
// Utils.ts 中提供 loadModule 函数
export async function loadModule(urls: string[]): Promise {
for (const url of urls) {
try { return await import(url) } catch {}
}
throw new Error('All CDN URLs failed')
}
// 使用:
const { onMessage } = await loadModule([
'https://fastly.jsdelivr.net/npm/dimsum-chat@0/+esm',
'https://cdn.jsdelivr.net/npm/dimsum-chat@0/+esm',
])
```
注意:Vite dev 模式下动态 import 可能导致卡顿,生产环境可用。
11.5 添加礼物特效
在 onMessage 回调中扩展类型处理:
```typescript
onMessage((_msg, parser) => {
switch (parser.type) {
case 'comment': /* 弹幕处理 */ break
case 'gift':
// 触发礼物特效动画
triggerGiftAnimation(parser.giftName, parser.giftNum, parser.giftImage)
break
case 'like':
// 触发点赞特效
triggerLikeEffect()
break
}
})
```
================================================================
AI Agent 特别提醒
================================================================
使用模式三时,AI Agent 需要注意:
1. 不要替开发者做环境安装决策——让开发者自己执行 npm/pnpm 命令
2. 修改任何模板文件前必须先读取原始内容
3. 四个必改文件(vite.config.ts / guide.dimsum.json / package.json / index.html)一个都不能漏
4. base 路径一致性是最常见的错误来源——务必三次确认
5. 建议开发者先用 pnpm run dev 验证,再执行 build+pack
6. 如果开发者需要 TypeScript 类型提示,确保安装了 dimsum-chat 的 npm 包(pnpm add dimsum-chat)