# agents.md — 项目上下文档案(跨账号迁移单一事实源) > **用途**:让任何 AI 助手(WorkBuddy 其他账号 / 其他 AI 工具)接手本项目时,无需重新摸索即可无缝衔接。 > **维护约定**:每次操作(改代码 / 跑命令 / 决策 / 踩坑)后,更新下方「操作日志」章节;环境与架构变化同步更新对应章节。 > **首次建立**:2026-08-24 --- ## 1. 项目概况 | 项 | 值 | |---|---| | 业务名 | admin.xpcool.com | | 工作目录 | `E:\xxcool\project\admin.xpcool.com` | | 基础框架 | Vue Vben Admin **5.7.0**(官方 monorepo 模板) | | 技术栈 | Vue 3 + TypeScript + Vite + pnpm 11 + turbo(monorepo)+ TDesign | | 代码来源 | 官方仓库 `vbenjs/vue-vben-admin` 克隆(remote 为 ghproxy 镜像:`https://ghproxy.net/https://github.com/vbenjs/vue-vben-admin.git`) | | 当前基线 | 已精简为单一应用 **web-tdesign**,并开始业务定制(`apps/web-tdesign/src/views/_core/authentication/login.vue` 已修改) | | git 分支 | `main`(仅 origin/main) | ## 2. 应用清单(apps/) | 应用 | 包名 | UI 库 | dev 端口 | 启动命令 | |---|---|---|---|---| | web-tdesign | `@vben/web-tdesign` | TDesign | **5999**(被占用自动切 6000) | `pnpm dev:tdesign` | > 本业务**唯一主应用为 web-tdesign**(`.env.development` 设 `VITE_PORT=5999`)。项目已从官方多应用模板精简,仅保留此应用。 ## 3. 环境要求与本机踩坑记录(重要) ### 版本要求(package.json engines) - Node `^22.18.0 || ^24.12.0` - pnpm `>=11.0.0`(`packageManager: pnpm@11.16.0`) ### 本机(Windows)已验证的运行方式 —— 直接复制可用 ```bash # 关键:pnpm 11.16.0 用到 node:sqlite,必须给 NODE_OPTIONS 加 --experimental-sqlite(Node 22 需 flag) export NODE_OPTIONS="--experimental-sqlite" # 建议:把 managed node 22.22.2 放到 PATH 最前(避免系统 node 23 引擎不匹配告警) export PATH="/c/Users/ybtdevxxl/.workbuddy/binaries/node/versions/22.22.2:$PATH" # 用 managed node 的 corepack 驱动 pnpm CORE="/c/Users/ybtdevxxl/.workbuddy/binaries/node/versions/22.22.2/corepack.cmd" "$CORE" pnpm install # 安装依赖 "$CORE" pnpm dev:tdesign # 启动开发服务器 ``` ### 坑 1:node:sqlite 模块缺失(2026-08-26 实际遇到,本次修复根因) - 现象:`pnpm --version` / `pnpm install` 报 `ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite`(`at ../store/index/lib/index.js`) - 原因:**pnpm 11.16.0 在解析包元数据时强依赖 `node:sqlite`**,而系统 Node 23.0 / managed Node 22 默认未启用该内置模块(22.5+ 起在 `--experimental-sqlite` 标志后可用,23.4 才默认开) - 解法:`NODE_OPTIONS=--experimental-sqlite` 后再跑 pnpm(本次直接沿用该法装依赖、起服务均成功) ### 坑 2:NODE_OPTIONS 污染 / shim - 现象:`pnpm install` 报 `[ERROR] [safe-delete] 操作失败 ... Some operations were aborted`(WorkBuddy 注入 `--require=...genie-safe-delete.cjs --use-system-ca`) - 原因:该 shim 会拦截 pnpm 的删除/符号链接操作 - 解法:在写死 `NODE_OPTIONS=--experimental-sqlite` 时已同时覆盖掉 shim;如要保留 shim,则先 `unset NODE_OPTIONS` 再补 flag ### 坑 3:Windows 符号链接权限 - 现象:`pnpm install` 报 `UNKNOWN: unknown error, symlink ...`,hoist 阶段失败 - 原因:本机未开「开发者模式/无管理员权限」,pnpm 默认 symlink 创建失败 - 解法:项目 `.npmrc` 已改用 `node-linker=hoisted`(扁平化)方案规避,见下 ### 镜像与链接配置(.npmrc) ```ini registry=https://registry.npmmirror.com node-linker=hoisted # 避免 symlink 权限问题,走扁平化安装 store-dir=E:\.pnpm-store # store 与项目同盘(E 盘),走同卷硬链接,快且无需管理员权限 ``` ## 4. 常用命令 ```bash # 依赖 pnpm install # 装依赖(preinstall 会校验必须用 pnpm;postinstall 跑 stub) pnpm reinstall # 清 lock 重装(= clean --del-lock && install) # 开发 pnpm dev:tdesign # 启动 web-tdesign(默认 http://localhost:5999,被占用自动切 6000) pnpm dev # turbo 并行起所有 app # 构建 / 检查 pnpm build:tdesign # 构建 web-tdesign pnpm check:type # 类型检查(turbo run typecheck) pnpm lint # 代码检查 pnpm test:unit # 单元测试(vitest) ``` ## 5. 架构速览(Vben Admin 5 monorepo) ``` apps/ 应用层:web-tdesign(唯一主应用) internal/ 内部工具:vite-config、tsconfig、eslint/stylelint/oxlint 配置、tailwind-config、turbo-run packages/ 共享包:@core(核心 UI/布局)、effects(请求/权限/hooks/插件)、stores、locales、 preferences(偏好设置)、icons、constants、utils、styles、types ``` - 主应用源码入口:`apps/web-tdesign/src/` - 路由:`src/router/routes/modules/`(dashboard.ts / demos.ts / vben.ts) - 页面:`src/views/` - API:`src/api/request.ts`(封装 `requestClient`)、`src/api/core/` - 偏好:`src/preferences.ts`(`defineOverridesPreferences`,官方默认 + 少量扩展字段) - 环境变量:`apps/web-tdesign/.env.development`(`VITE_PORT=5999`) - 路径别名:`#/*` → `./src/*`(package.json imports) ### 关键开发约定(Vben 5 特有) - 权限:`preferences.ts` 的 `app.accessMode`(frontend/backend/mixed);按钮级用 `` / `hasAccessByRoles` / `v-access:code` - API 请求:`requestClient.get/post(url)`,代理在 `vite.config.ts` - 国际化:`$t()`,语言包在 `packages/locales` - 主题:CSS 变量覆盖(`:root { --primary: ... }`),偏好里 `theme.builtinType/colorPrimary` - 详细参考:本机已装 vben skill(`C:\Users\ybtdevxxl\.workbuddy\skills\vben`,含 20+ references) ## 6. 操作日志 > 倒序(最新在上)。每条:日期 / 操作 / 结果 / 备注 ### 2026-08-26(修复依赖安装) 1. **问题**:`pnpm install` 装不上,报 `ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite` 2. **根因**:pnpm 11.16.0 强依赖 `node:sqlite`,但系统 Node 23.0 / managed Node 22 默认未启用该内置模块(需 `--experimental-sqlite` 标志) 3. **修复**:设 `NODE_OPTIONS=--experimental-sqlite` 后用 managed node 22.22.2 + corepack 跑 `pnpm install` → 成功(39 workspace 项目,Already up to date)✅ 4. **启动**:`pnpm dev:tdesign` → Vite ready,http://localhost:6000(5999 被占用自动切换)✅ HTTP 200,标题「Vben Admin Tdesign」 5. **澄清项目结构**:确认项目已精简为**唯一应用 web-tdesign**(非 agents.md 旧记录的 web-antd),同步更新本档案 6. **残留进程清理**:终止了此前多次失败重试遗留的 pnpm/tsdown/stub 后台进程 ### 2026-08-24(首次搭建) 1. **梳理项目**:确认为 Vben Admin 5.7.0 官方模板克隆,无业务定制;主应用 web-antd(端口 5666) 2. **安装依赖**: - 第 1 次失败:NODE_OPTIONS safe-delete shim 拦截 → 解法 `unset NODE_OPTIONS` - 第 2 次失败:Windows symlink 权限 → 解法 `.npmrc` 加 `package-import-method=copy` - 最终:`pnpm install` 成功(46 workspace 项目,1723 包)✅ 3. **启动开发服务器**:`pnpm dev:antd` → 验证 http://localhost:5666 (状态见下) 4. **建立本文件 agents.md**:项目上下文档案 + 操作日志机制 5. **建立工作日志**:`.workbuddy/memory/YYYY-MM-DD.md`(每日记录,跨账号迁移时连同 agents.md 一起拷贝) ## 7. 迁移清单(换 WorkBuddy 账号 / 换机器时) 1. 拷贝整个项目目录(含 `node_modules` 可不拷,重新 install 即可) 2. 必拷文件:`agents.md`(本文件)+ `.workbuddy/memory/`(历史工作日志) 3. 本机环境要点(新机器): - Node ≥ 22.18;pnpm ≥ 11(corepack) - 跑 pnpm 前设 `NODE_OPTIONS=--experimental-sqlite`(否则报 node:sqlite 缺失) - Windows 无开发者模式时保持 `.npmrc` 的 `node-linker=hoisted` 与 `store-dir=E:\.pnpm-store` 4. 装依赖后先 `pnpm dev:tdesign` 验证 5999/6000 端口 ## 统一工作约定(xpcool.com 中央规则) > 与中央 `../workbuddy.xpcool.com/.workbuddy/memory/MEMORY.md` 保持一致;本项目变更流水在 `.workbuddy/memory/CHANGELOG.md`。 1. **中文注释**:写/改代码时,在应有处(函数、复杂逻辑、配置项、非显然分支)加中文注释。 2. **做记录**:每次请求/变更/修复/文档动作,都在本项目 `.workbuddy/memory/CHANGELOG.md` 顶部追加一条,格式 `YYYY-MM-DD | 类型 | 一句话摘要`(类型:REQ/CHG/FIX/DOC/CFG/DEP)。 3. **中文优先**:与用户的思考、输出、交流,能中文尽量中文。