Commit Graph
10 Commits
Author SHA1 Message Date
yinjun.chen1 23950143ea fix(scan): demo 数据固定 + 增量缓存清理 + 磁盘占用跨平台统计
- demo 包数据改为模块加载时固定快照(原实现每次请求重新随机生成,
  版本/大小/日期每次刷新都变,演示清理结果前后不一致);移除 seed 中重复 sharp 条目
- pkgCache 增量缓存增加清理:扫描后移除本次未扫到的旧目录条目;
  server 端 invalidateScan 时调用 clearPkgCache,storage 切换后不残留旧目录口径
- diskBytesOf 弃用 execSync('du -sk')(Windows 不可用),改为 Node 原生递归字节和
2026-09-21 09:58:00 +08:00
yinjun.chen1 115c5ccc9a fix(clean): 物理 tgz 按文件匹配删除 + semver 完整语义排序
- 新增 tgz.js:统一列出包目录物理 .tgz 文件,支持新版 {version}.tgz 精确匹配
  与旧版 {pkgname}-{version}.tgz 后缀匹配,删除按真实文件 size 统计
- semver.js 重写:完整 npm 语义比较(prerelease 逐标识比较、数字<非数字、
  公共前缀更长者更大),修复原实现剥离 prerelease 导致 beta 挤掉正式版的隐患
- clean.js / scanner.js / server.js 接入统一口径
- 新增 test/semver.test.js 与 test/tgz.test.js 回归测试(node --test)
2026-09-21 09:49:38 +08:00
陈银军 2e4977a090 perf(scan): 增量扫描缓存 + libuv 线程池扩容
- scanner.js: 包目录 mtime(+package.json mtime) 指纹缓存扫描结果,
  两次扫描间未变化的包直接复用,只重扫有增删/改写的包目录,
  大量长期不变的缓存包几乎零 IO
- server.js: 入口兜底 UV_THREADPOOL_SIZE=8(libuv IO 线程池默认仅 4,
  磁盘 stat/readFile 并发是扫描主瓶颈,NAS 四核安全)
- docker-compose.yml: 同步注入 UV_THREADPOOL_SIZE=8
2026-09-21 00:55:46 +08:00
陈银军 b4e9747348 perf(scan): 后台扫描改为 fs.promises + 并发池并行 IO
scanStorageAsync 重写:异步递归列目录 + 16 路并发池并行
扫描包目录,目录内文件 stat 并行,结果按下标回填保持顺序。
数千包/慢磁盘(NAS)场景吞吐显著优于旧的单线程同步 IO。
2026-09-21 00:28:18 +08:00
陈银军 f1b3cc85e2 fix(scan): 包描述/主页/仓库/作者/许可读取不到
Verdaccio 落盘的元数据顶层不含 description/homepage 等字段(实测
只有 name/versions/time/dist-tags/readme),但这些字段完整存在于
每个 versions[v] 里。新增 metaField 回退逻辑:顶层取不到时按
semver 排序取最新版本里的字段,修复检索页/详情抽屉描述全为「—」。
2026-09-19 23:46:21 +08:00
陈银军 e7de52a6d1 fix(scan): 今日更新统计修复——按北京时间换算并计入 .tgz 缓存日
- lastUpdated 原取 package.json time 字段的 UTC 日期截断,跨 8 小时会显示为前一天(如 UTC 09-18 20:00 = 北京 09-19),导致「今日更新包数」漏计
- 版本发布日改用北京时间(Intl.DateTimeFormat Asia/Shanghai)换算
- 新增 .tgz 文件 mtime 作为补充:今天拉取缓存的包即使发布时间是昨天,也计入「今天更新」
2026-09-19 23:31:19 +08:00
陈银军 a7dc1b7a17 fix(size): 修复轻量包占用显示为 0 MB 的精度问题
后端 fmtMb 用 toFixed(1) 保留 1 位小数,<0.05MB 的包(几 KB~几十 KB
的轻量组件)被截断为 0。改为保留 KB 级精度;前端统一使用 store 的
fmtSize/fmtBytes(新增 KB 档位),所有包大小显示点(检索/忽略/概览/
卡片/抽屉/清理对话框/Top20)统一替换,消除各组件重复的本地格式化。
2026-09-19 22:04:14 +08:00
陈银军 8a54fb2d5c feat: 包信息展示与扫描数据修正
- scanner: 版本数只统计实际存在的 .tgz(修复 playwright-core 5113 版本虚高),解析 description/homepage/repository/author/license 元数据字段
- 前端: 新增 PkgLogo 首字母徽标组件,详情抽屉展示包 logo(主页 favicon 加载失败自动回退)、介绍与主页/仓库/许可胶囊,优化抽屉头部布局
- 全量 UI 改进: 毛玻璃扫描遮罩与进度、头像菜单重新扫描、主题切换、移动端 Tabbar/StatMini/Top30Panel 响应式、列表瘦身与详情按需加载
- compose: TZ=Asia/Shanghai + 命名卷 vcm-data 解决 SQLite 权限
- 更新 amd64 镜像 tar
2026-09-19 21:07:27 +08:00
陈银军 f84f21574f fix: 扫描缓存与真实大小计算,解决页面加载慢与数据虚增
- scanner: 大小改为统计实际 .tgz 文件(兼容 {version}.tgz 与 {pkg}-{version}.tgz 命名),
  不再用 unpackedSize 兜底虚增数倍
- server: 扫描结果内存缓存(首次懒扫描,后续请求秒回),新增 POST /api/scan 手动重扫,
  /api/packages 返回 scannedAt 时间戳,clean/删版本后自动失效缓存
- 前端: 概览页新增「重新扫描」按钮 + 「基于 xxx 扫描」时间展示;Top30 在真实环境
  (无访问统计)降级为「缓存占用 Top 30」按大小排序
- compose: 数据卷改 named volume,修复非 root 容器 SQLITE_CANTOPEN
2026-09-19 17:57:58 +08:00
陈银军 0a9ca8894a feat: Verdaccio 缓存可视化管理面板(前端 + 后端 + Docker)
- 前端 Vue3+Vite+Element Plus 按需引入,双主题(bright/dark)CSS 变量
- 三端响应式(桌面/平板/手机),登录/概览/检索/阈值/忽略/动态 6 页面
- 后端 Express + better-sqlite3,目录扫描 + demo 模式,清理原子写入
- Dockerfile 多阶段构建 + docker-compose(storage 只读挂载)
2026-09-19 15:00:04 +08:00