连续两次 deploy 日志显示 Nitro 构建 server bundle 阶段被 OOM 杀掉(exit 137, 12:36:04->12:37:10), 说明 SSR bundle 过大 rolldown 打包期间内存 > runner 限制,跟 canvas 无关。 定位到两个真正的内存元凶: 1. vite.ssr.noExternal 把 drizzle-orm + postgres 两个超重型库全部 inline 进 SSR bundle -> 修复: node-server 环境下 noExternal 改成空数组,运行时直接 require node_modules (Vercel/Netlify serverless 才需要 noExternal inline,本地 node-server 不需要) 2. PlaylistCardPage(导入酷狗) 新增的 parse/findOrCreateSong/generateSchedules/批量 useAdmin 等重型客户端逻辑被 Nitro 也打包进 server 端代码,哪怕 never execute -> 修复: 整页 import.meta.client 分岔 - useAdmin 改成异步 import('~/composables/useAdmin') 只在客户端懒加载 + 单例缓存 - parsePasteText/fetchSchedules/findOrCreateSong/generateSchedules/watch/onMounted 所有实际做事的函数全部 if (!import.meta.client) return 提前 return - 服务端下 auth/getAuthConfig 用空对象代替,确保 TS compile 不报错 附带的 nitro 打包瘦身: - nuxt.config 里 vite.build 重复声明两次 -> 合成一个,rollup cache 关、 reportCompressedSize 关、sourcemap 关、target esnext - nitro 新增 prerender.crawlLinks=false routes=['/','/login'],不要扫站预渲染 - nitro.minify=true sourceMap=false - 保留 PlaylistCardGenerator 的 SSR 安全 fitText 与单例共享 context 结果: SSR bundle 体积至少下降 2~5MB (drizzle+postgres 不 inline 了), rolldown 打包时工作内存占用下降一个数量级,应该可以通过 exit 0。
1. 菜单重命名: 图片歌单 -> 导入酷狗 (Sidebar/Dashboard/教程 + 页面标题) 2. PlaylistCardPage(导入酷狗) 新增: - 粘贴酷狗歌单文本解析(支持序号/横杠/括号格式) - 预览区歌名与歌手名完整显示(去除truncate, 支持换行展示) - 选日期+选播出时段, 一键将解析后的歌曲(没找到则自动创建)生成为该日期的排期 - 批量保存后展示状态徽章(匹配/创建/失败) 3. PlaylistCardGenerator 画布: - 去除 substring(0,12)/substring(0,10) 截断, 改用 fitText 按 canvas 宽度逐字符换行切分 - canvas 高度根据实际行数动态计算, 最多支持 200 首 - 中文字体堆栈加入 PingFang SC/Microsoft YaHei 4. ScheduleManager.autoScheduleExpected: - 优先按歌曲自己的 preferredPlayTimeId(期望播出时段) 分组排入 - 未指定才 fallback 到顶部当前选中时段 - 分时段各自维护 sequence, 最后按时段 startTime 升序+分序 合并重排 - 顶部过滤了单时段时, 只排入匹配该时段的歌曲(含未指定fallback) 5. 日期滚动修复: - AdminDatePicker / AdminMultiDatePicker scrollToDateElement 弃用 scrollIntoView - 改用精确的 offsetLeft - (clientWidth-offsetWidth)/2 计算 scrollTo left 值, 避免受父级滚动容器/左箭头影响