Files
HyperBilibili/.mimocode/plans/1783084400288-jolly-rocket.md
T
2026-07-03 21:33:27 +08:00

10 KiB
Raw Blame History

代码修复计划 — Bug、风险与性能问题

修复优先级总览

阶段 问题数 描述
P0 紧急 8 功能完全不可用、崩溃、安全漏洞
P1 高 8 数据损坏、启动失败、CI 失效
P2 中 14 功能异常、性能退化、潜在隐患
P3 低 11 代码质量、工具链现代化

P0 紧急修复(功能不可用/崩溃)

1. 回复功能 — API 调用交换 + 未声明变量

文件: src/pages/reply/replys/replys.ux

  • L64-77: GiveTreeReplyGiveSecReply 调用语义反了,交换调用
  • L97: this.input_text 未声明,在 private data 中添加 input_text: { content: "" }

2. 音乐播放 — api 未定义

文件: src/pages/video/player/player.ux

  • L782,822,1261,1461,1495: api.getSongUrl() / api.getLyric() 调用但 api 未导入
  • 需要创建 src/bilibiliclient/music/music.ts 模块(或找到正确的 API 来源),在文件顶部导入并赋值给 api

3. 动态详情 — typeof 比较恒为 true

文件: src/pages/app/features/dynamic/detail/detail.ux

  • L87: typeof this.dyn != Objecttypeof this.dyn !== "object"

4. 空回复检查 — 字符串与数字比较

文件: src/pages/video/videodetail/videodetail.ux

  • L202: evt.detail.content === 0!evt.detail.content || evt.detail.content.length === 0

5. Settings JSON.parse 崩溃

文件: src/settings.ts

  • L37: 用 try-catch 包裹 JSON.parse(data)catch 中保持默认 SETTINGS 并 log 警告

6. App 启动 Promise 无错误处理

文件: src/app.ux

  • L44-50: 用 try-catch 包裹每个 await,或用 Promise.allSettled 并行执行非关键初始化
  • 关键初始化(savedcontent.initialize)失败应显示错误页面
  • 非关键初始化(getNetworkType)失败可降级为默认值

7. HTTP 追踪 URL(调试遗留)

文件: src/usertracker.ts

  • L5: 取消注释 L4 的 HTTPS URL,删除或注释 L5 的 HTTP 内网地址

8. asyncapi access() 语义错误

文件: src/asyncapi/file.ts

  • L161: fail 回调中 reject(...)resolve(false),使调用方能用布尔值判断文件是否存在

P1 高优先级修复

9. API 响应空检查链

文件: src/bilibiliclient/api/request.ts

  • L60, L91: return response.data 前增加对 responseresponse.data 的 null 检查
  • 创建 safeData(response) 辅助函数,统一处理 response.data.code !== 0 的错误情况
  • 在所有 bilibiliclient 子模块中使用此辅助函数

10. 文章图片空引用

文件: src/articletools.ts

  • L39: 在访问 dom.attributes.src 前增加 dom.attributes && dom.attributes.src 检查
  • L49: 第二个 parseInt(dom.attributes.height)parseInt(dom.attributes.width)

11. 页面返回键崩溃

文件: src/ui/ui.ts

  • L55: 增加 pageStack.length >= 2 判断,不足时跳过返回动画
  • L57-58: 增加 global.vmPool[lastPageName] 存在性检查

12. VmPool GC 逻辑错误

文件: src/ui/ui.ts

  • L21: returncontinue

13. 构建脚本不传播失败

文件: scripts/build_s3s4.py, scripts/build_rw5.py

  • L8: os.system("yarn run build")subprocess.run(["yarn", "run", "build"], check=True)
  • 同时更新 import 语句添加 subprocess

14. buildtools.py 异常吞掉

文件: scripts/buildtools.py

  • L18: Exception(...)raise Exception(...)
  • L27-31: 用 with open(...) as f: 替换裸 open()

15. ESLint 配置缺失

文件: 新建 eslint.config.mjs

  • 创建 ESLint flat config 文件,兼容 ESLint 9
  • 或将 package.json 中 ESLint 降级到 ^8.x 并保留旧 .eslintrc

16. Husky hooks 未版本控制 + API 过时

文件: .gitignore, husky.sh

  • .gitignore 中删除 .husky/
  • 用 Husky v9 API 重写 husky.shhusky init + 直接写 .husky/pre-commit.husky/commit-msg 脚本)

P2 中优先级修复

17. bvid 默认值类型错误

文件: src/pages/video/videodetail/videodetail.ux

  • L84: bvid: 1bvid: ""

18. 数组初始化为对象

文件: src/pages/user/user.ux L53, src/pages/search/search/search.ux L32

  • masterpiece: {}masterpiece: []
  • hotwords: {}hotwords: []

19. 音频事件处理被覆盖

文件: src/pages/video/player/player.ux

  • L404-407: 删除 onInit 中重复的 audio.ontimeupdate 赋值,或合并逻辑到 bindAudioEvents

20. fetchDefaultPlaylist 空函数

文件: src/pages/video/player/player.ux

  • L665-668: 实现函数体或标记为 TODO 并添加用户提示

21. Settings 加载竞态

文件: src/settings.ts

  • 重构 loadSettings 返回 Promise,在 app.uxawait 完成后再继续初始化

22. HTML 解析器嵌套标签问题

文件: src/htmlparser.ts

  • L38: 对于嵌套标签,改用递归下降解析而非单正则匹配
  • 或引入轻量 HTML 解析库

23. 收藏夹名称硬编码

文件: src/bilibiliclient/video/action.ts L23, L47

  • 改用 folder.id === 0(B站默认收藏夹 ID 固定为 0)或通过 API 响应中的 default 字段判断

24. 存储索引无验证

文件: src/savedcontent.ts

  • L38: JSON.parse 后增加 Array.isArray() 检查和元素结构验证

25. 日志无缓冲

文件: src/logger/logger.ts

  • 实现内存缓冲区,批量写入(如每 10 条或每 5 秒 flush 一次)
  • 添加日志文件轮转机制(保留最近 N 个文件)

26. VmPool GC 定时器优化

文件: src/ui/ui.ts

  • 在页面销毁事件中触发 GC,替代 10 秒定时器

27. 动画引用泄漏

文件: src/animation/engine.ts

  • SequenceAnim.stop()DomAnim.stop() 中从 global.animations 移除自身引用

28. request.ts 无超时

文件: src/bilibiliclient/api/request.ts

  • getRequestpostRequest 增加 timeout 参数(默认 15s),传入 fetch.fetch()

29. Content-Length 冗余设置

文件: src/bilibiliclient/message/message.ts

  • L51: 删除手动 Content-Length 设置,让 HTTP 客户端自动处理

30. Stylelint 废弃规则

文件: .stylelintrc.js

  • L10-11: 删除 color-hex-casecolor-hex-length,或安装 stylelint-stylistic 插件

P3 低优先级改进

31. formatNumber 边界处理

文件: src/tools.ts L3-13 — 增加 NaN/负数/undefined 守卫

32. funnytips 日期捕获时机

文件: src/funnytips.ts L1 — new Date() 移入 getTips() 函数内部

33. jumpcheck storage 无 fail 回调

文件: src/jumpcheck.ts — 增加 fail 回调,导航到错误页面

34. Object.assign 原型组装

文件: src/bilibiliclient/client.ts L55-68 — 长期重构为 class extends 或 mixin 模式(影响范围大,建议单独 PR)

35. quickapp.config.js 健壮性

文件: quickapp.config.js

  • L7: execSync 包裹 try-catch
  • L10: 相对路径 → path.resolve(__dirname, ...)
  • L12-17: 模板字符串值转义引号和反斜杠

36. manifest.json 生产日志级别

文件: src/manifest.json L53 — "log""warn"(或在构建脚本中覆盖)

37. .prettierrc.js 废弃选项

文件: .prettierrc.js L10 — jsxBracketSameLinebracketSameLine

38. buildInfoContent 注入风险

文件: quickapp.config.js L12-17 — 对插值值做 JSON.stringify 转义

39. PII 泄漏

文件: quickapp.config.js L8 — 移除 os.userInfo().username,改用 CI 环境变量或固定标识

40. logger %c 样式无效

文件: src/logger/logger.ts L61 — 移除 %c 和 style 参数

41. eula.ts 嵌套 <p> 标签

文件: src/eula.ts — 修正 HTML 结构,外层 <p> 改为 <div>


实施建议

分批策略

  1. 第 1 批 (P0): 8 个修复,每个独立可测,建议逐个 PR
  2. 第 2 批 (P1): 8 个修复,工具链相关可合并为一个 PR
  3. 第 3 批 (P2): 14 个修复,按模块分组(player 模块、bilibiliclient 模块、基础设施)
  4. 第 4 批 (P3): 11 个改进,可在后续迭代中逐步完成

验证方式

  • 每个修复在 NuttX 设备或模拟器上手动验证对应功能
  • 构建脚本修复:运行 python scripts/build_s3s4.pypython scripts/build_rw5.py 确认退出码
  • 工具链修复:运行 yarn lint 确认 ESLint 正常工作
  • CI 修复:推送到 next-gen 分支确认 GitHub Actions 流水线绿色

关键文件清单

文件 修改类型
src/pages/reply/replys/replys.ux Bug 修复
src/pages/video/player/player.ux Bug 修复 + 功能实现
src/pages/app/features/dynamic/detail/detail.ux Bug 修复
src/pages/video/videodetail/videodetail.ux Bug 修复
src/settings.ts 健壮性修复
src/app.ux 错误处理
src/usertracker.ts 安全修复
src/asyncapi/file.ts 语义修复
src/bilibiliclient/api/request.ts 健壮性修复
src/articletools.ts Bug 修复
src/ui/ui.ts Bug 修复 + 性能
src/tools.ts 边界处理
src/htmlparser.ts Bug 修复
src/logger/logger.ts 性能优化
src/savedcontent.ts 健壮性修复
src/animation/engine.ts 内存泄漏修复
src/funnytips.ts Bug 修复
src/jumpcheck.ts 健壮性修复
src/bilibiliclient/video/action.ts 兼容性修复
src/bilibiliclient/message/message.ts 代码清理
scripts/build_s3s4.py CI 修复
scripts/build_rw5.py CI 修复
scripts/buildtools.py Bug 修复
quickapp.config.js 健壮性 + 安全
package.json 依赖更新
.prettierrc.js 配置更新
.stylelintrc.js 配置更新
husky.sh 重写
.gitignore 配置修复
.github/workflows/main.yml CI 修复
eslint.config.mjs 新建
src/pages/user/user.ux Bug 修复
src/pages/search/search/search.ux Bug 修复
src/eula.ts HTML 修正
src/manifest.json 配置调整