本文引用的文件
本文件面向AI有声书生成平台的前端团队,聚焦于UniApp跨平台开发中的常见问题与排障策略。围绕以下主题展开:marked包Unicode正则兼容性、运行环境版本不一致、Android手机网络请求异常、window/document/localStorage兼容性、JSON.stringify循环引用崩溃、CSS gap属性不兼容等典型故障;并提供错误现象、根因分析、解决步骤、预防措施、条件编译最佳实践、API兼容性对照表与调试技巧。
前端工程采用UniApp Vue3生态,基于Vite构建,支持多端(H5、App、小程序)统一开发。关键目录与文件:
配置:manifest.json、pages.json、App.vue、index.html
graph TB
A["应用入口<br/>main.ts"] --> B["状态管理<br/>Pinia"]
A --> C["用户状态初始化<br/>useUserStore()"]
A --> D["条件编译注入<br/>vConsole(H5)"]
E["配置工具<br/>config.ts"] --> F["请求封装<br/>request.ts"]
G["存储工具<br/>storage.ts"] --> F
H["调试工具<br/>debug.ts"] --> F
F --> I["网络层<br/>uni.request"]
J["构建配置<br/>vite.config.ts"] --> K["代理/本地开发<br/>/api,/uploads,/videos"]
图示来源
章节来源
章节来源
下图展示从页面到服务端的关键调用链路,以及条件编译与平台适配点:
sequenceDiagram
participant Page as "页面组件"
participant Req as "请求封装<br/>request.ts"
participant Conf as "配置工具<br/>config.ts"
participant Net as "网络层<br/>uni.request"
participant Srv as "后端服务"
Page->>Req : 调用get/post/put/del
Req->>Conf : 获取API基础URL
Conf-->>Req : 返回平台适配后的URL
Req->>Net : 发起uni.request(含鉴权头/超时)
Net-->>Req : 返回响应(含code/data/message)
Req->>Req : 校验成功码/401/429/5xx
Req-->>Page : 成功数据或抛出错误
图示来源
关键流程
flowchart TD
Start(["进入 request(url, options)"]) --> BuildHeaders["构建请求头<br/>Authorization/Content-Type"]
BuildHeaders --> CacheCheck{"GET且启用缓存?"}
CacheCheck --> |是| ReturnCache["命中缓存则返回"]
CacheCheck --> |否| MakeReq["调用 makeRequest"]
MakeReq --> UniReq["uni.request 发起请求"]
UniReq --> Resp["处理响应"]
Resp --> IsSuccess{"code==0 或 success==true?"}
IsSuccess --> |是| Resolve["返回 data 或默认值"]
IsSuccess --> |否| HandleErr["401登出/429限流/5xx提示/其他错误"]
Resolve --> End(["结束"])
HandleErr --> End
ReturnCache --> End
图示来源
章节来源
条件编译注意
平台判断依赖uni.getSystemInfoSync,需确保在合适时机调用
flowchart TD
PStart["getPlatform()"] --> H5Check{"是否H5?"}
H5Check --> |是| H5Env["返回 'h5'"]
H5Check --> |否| AppCheck{"是否APP-PLUS?"}
AppCheck --> |是| SysInfo["读取系统信息(platform/system)"]
SysInfo --> Plat{"android/ios?"}
Plat --> |android| RetAndroid["返回 'android'"]
Plat --> |ios| RetIOS["返回 'ios'"]
Plat --> |other| RetAndroid2["兜底返回 'android'"]
AppCheck --> |否| RetWeb["返回 'web'"]
图示来源
章节来源
兼容性注意
JSON序列化/反序列化需保证数据可序列化
flowchart TD
SStart["isH5检测"] --> TokenGet["getToken()<br/>H5: localStorage<br/>App/MP: uni.storage"]
SStart --> TokenSet["setToken()<br/>同上"]
SStart --> UserInfoGet["getUserInfo()<br/>JSON.parse"]
SStart --> UserInfoSet["setUserInfo()<br/>JSON.stringify"]
图示来源
章节来源
使用建议
H5端可结合vConsole进行交互式调试
sequenceDiagram
participant Win as "window"
participant Uni as "uni.onError"
participant Dbg as "debug.ts"
participant Log as "控制台"
Win-->>Dbg : unhandledrejection/error
Uni-->>Dbg : 错误回调
Dbg->>Log : 输出错误信息(含堆栈)
Dbg->>Log : API请求/响应日志
Dbg->>Log : 页面切换/导航拦截日志
图示来源
章节来源
运行时依赖
vue/pinia/katex/vue-i18n等
graph LR
Pkg["package.json"] --> Vite["@dcloudio/vite-plugin-uni"]
Pkg --> Marked["marked ^4.3.0"]
Pkg --> VC["vconsole ^3.15.1"]
Vite --> Uni["UniApp 生态"]
Marked --> Render["Markdown 渲染"]
VC --> Debug["H5 调试"]
图示来源
章节来源
[本节为通用指导,无需具体文件引用]
[本节为通用指导,无需具体文件引用]
章节来源
章节来源
章节来源
章节来源
[本节为通用指导,无需具体文件引用]
章节来源
[本节为通用指导,无需具体文件引用]
章节来源
通过统一请求层、平台配置与条件编译、存储适配与调试工具,本项目在多端环境下具备较好的稳定性与可观测性。针对本文列出的典型问题,建议优先从平台判断、API地址、存储适配与调试日志入手排查,并建立跨端回归测试与版本一致性检查机制,持续降低跨平台风险。
[本节为总结性内容,无需具体文件引用]
章节来源