# 模式三:Vue3+TypeScript 模板模式 — 完整工作流 # 版本:1.0.0 | 更新日期:2026-06-09 # 适用:熟悉现代前端工具链的开发者 # 模板地址:https://github.com/MiegoLive/dimsum-chat-vue3-ts-template # 耗时:约 1-4 小时 ================================================================ 模式三概述 ================================================================ 本模式适用于有现代前端开发经验的开发者。使用官方 Vue3+TypeScript 模板, 提供完整的工程化开发体验: - Vue 3.5+ + ``` 注意: - 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)