AnythingLLM开发环境踩坑记:从Yarn迁移到Bun的完整指南(Windows版)
我是张大鹏做了十多年人工智能。说实话最难的不是找一个好用的开源项目是把它在自己的开发环境里跑起来。今天分享一个真实的踩坑经历把 AnythingLLM 从 Yarn 迁移到 Bun并且让它在 Windows 上稳定运行。过程踩了不少坑但最后真正实现了比 Yarn 快 5-10 倍的安装速度。一、先说这个项目为什么特殊AnythingLLM 是一个 Monorepo多包仓库不是普通的单个项目。搞清楚这个结构是顺利启动的第一步。AnythingLLM/ ├── server/ ← Node.js Express 后端监听 3001 端口 ├── frontend/ ← React Vite 前端监听 3000 端口 ├── collector/ ← 独立文档处理服务监听 8888 端口 └── 根目录 ← 只放 concurrently 等基础工具三个子项目每个都有自己独立的package.json需要分别装依赖。这就是为什么官方的setup脚本要分别cd进每个目录执行安装setup: cd serveryarn cd../collectoryarn cd../frontendyarn yarn setup:envs yarn prisma:setup 二、为什么我想换成 BunYarn 在这个项目里有两个问题问题一Windows 兼容性问题官方的setup:envs脚本用的是 Unix 命令setup:envs:cp -n ./frontend/.env.example ./frontend/.env ...cp是 Linux/Mac 命令在 Windows 原生 PowerShell 下直接报错。prisma:reset里还用了truncate -s 0同样不支持 Windows。问题二安装速度AnythingLLM 依赖很多server 有 258 个包frontend 有 169 个包yarn 安装一次要 1-2 分钟。Bun 声称快 5-10 倍实测下来确实有感知的速度提升。三、Bun 是什么和 Yarn 有什么区别很多人听说过 Bun但不确定它能替代什么。简单说pnpmbun定位高效包管理器全能运行时 包管理器 打包工具核心功能安装、管理 Node.js 包运行 JS/TS 安装包 打包速度快硬链接节约磁盘更快原生实现比 Node.js 启动快npm 兼容性完全兼容基本兼容偶有细节问题Bun 的核心优势是速度和一条龙服务对于 AnythingLLM 这种依赖较多的项目效果感知很明显。四、迁移步骤完整记录4.1 检查 Bun 是否安装bun--version如果没安装Windows 下用 PowerShell 安装irmbun.sh/install.ps1|iex我这边安装的是 v1.3.13版本够用。4.2 修改根目录 package.json这是最核心的一步。原项目有三个跨平台问题问题 1setup:envs用的是 Unixcp命令// 改前Unixsetup:envs:cp -n ./frontend/.env.example ./frontend/.env ...// 改后Windowssetup:envs:if not exist .\\frontend\\.env copy .\\frontend\\.env.example .\\frontend\\.env if not exist .\\server\\.env.development copy .\\server\\.env.example .\\server\\.env.development if not exist .\\collector\\.env copy .\\collector\\.env.example .\\collector\\.env if not exist .\\docker\\.env copy .\\docker\\.env.example .\\docker\\.env; echo All ENV files copied!问题 2prisma:reset用的是 Unixtruncate命令// 改前prisma:reset:truncate -s 0 server/storage/anythingllm.db yarn prisma:migrate// 改后prisma:reset:type NUL server\\storage\\anythingllm.db bunx prisma migrate dev问题 3所有yarn命令替换为bun run// yarn → bun rundev:server:cd server bun run devdev:collector:cd collector bun run devdev:frontend:cd frontend bun run devprisma:generate:cd server bunx prisma generatesetup:cd server bun install cd ../collector bun install cd ../frontend bun install cd .. bun run setup:envs bun run prisma:setup4.3 安装依赖进入各子目录分别执行# 依次安装三个部分的依赖cdserverbuninstallcd../collectorbuninstallcd../frontendbuninstall实测安装速度Server258 包24.76 秒Collector54 包15.98 秒Frontend169 包68.66 秒总耗时约110 秒比 yarn 快了不少。4.4 初始化环境变量bun run setup:envs这一步会复制.env.example文件到各子目录。4.5 生成 Prisma Client 并迁移数据库bun run prisma:generate bun run prisma:migrate注意如果之前用过 yarn 安装过可能需要先清理旧的 Prisma 缓存# 删除旧的 .prisma 缓存目录rmdir/s /q server\node_modules\.prisma# 再重新生成bunx prisma generate五、踩坑实录这些问题让我花了最多时间坑 1Prisma DLL 文件被进程锁住EPERM: operation not permitted表现EPERM: operation not permitted, unlink D:\code\AnythingLLM\server\node_modules\.prisma\client\query_engine-windows.dll.node原因之前运行过的 Node.js 进程没有完全退出还锁着 Prisma 的二进制文件。解决方法# 找到 nodemon 和 node 进程Get-Process-Namenode,nodemon|Select-ObjectId,ProcessName# 强制杀掉占用文件的进程Stop-Process-Id PID-Force然后删除旧缓存重新bunx prisma generate。预防建议每次重新安装或生成之前先确保所有 node/bun 进程已退出。坑 2两个 Server 进程同时抢占 3001 端口EADDRINUSE表现Error: listen EADDRINUSE: address already in use :::3001原因旧的 server 进程还没退出又启动了一个新的。两个进程同时监听 3001导致端口冲突。解决方法# 找到占用 3001 端口的进程netstat-ano|Select-String3001.*LISTENING# 杀掉所有 node 进程重新启动Stop-Process-Namenode-ForceStop-Process-Namebun-Force预防建议重启服务前养成好习惯先确认没有残留进程。坑 3Frontend rollup 路径找不到ERR_MODULE_NOT_FOUND表现Error [ERR_MODULE_NOT_FOUND]: Cannot find module D:\code\AnythingLLM\frontend\node_modules\rollup\dist\es\rollup.js Did you mean to import rollup/dist/rollup.js?原因Bun 安装 frontend 依赖时rollup 的文件结构和 Vite 4.x 的预期路径不匹配。解决方法# 重命名旧目录让 Bun 重新安装cmd/cren D:\code\AnythingLLM\frontend\node_modules node_modules.oldcd frontend bun install重新安装后rollup 路径恢复正常。坑 4Bun 不识别脚本里的后台命令符表现error: Failed to run script setup:envs due to error Background commands are not supported yet.原因我在setup:envs里用了来连接多个 Windows 命令但 Bun 把当作后台命令符处理了。解决方法把改成;setup:envs:if not exist .\\frontend\\.env copy ... if not exist .\\server\\.env.development copy ... ; echo All ENV files copied!最后一个命令后面用;前面的命令之间用Bun 只在命令末尾处理有问题。坑 5前端加载 404但 Vite 其实在运行表现浏览器访问http://localhost:3000返回 500 或 404但 Vite 日志显示正常启动。原因浏览器缓存了已崩溃的旧 Vite 进程的连接。解决方法杀掉所有旧的 node/bun 进程用浏览器的隐身模式Chrome 隐私窗口访问六、Bun 在这个项目里的局限性虽然 Bun 大部分工作得很好但有一些细节需要注意场景状态说明bun install✅ 完全可用比 yarn 快很多bun run dev✅ 可用通过 nodemon 启动bunx prisma✅ 可用Prisma CLI 正常bun run build(frontend)✅ 可用Vite 构建正常concurrently多进程⚠️ 需用 Windows 原生命令Bun 不支持后台符setup:envs跨平台脚本⚠️ 需手动改cp/truncate等不兼容对于dev:all这种同时启动多个服务的情况建议直接在多个终端里分别运行# Terminal 1cdserverbun run dev# Terminal 2cdcollectorbun run dev# Terminal 3cdfrontendbun run dev七、完整的启动流程Windows Bun# 1. 确保 Bun 安装bun--version# 2. 清理旧的 node 进程重要Stop-Process-Namenode-Force-ErrorAction SilentlyContinueStop-Process-Namebun-Force-ErrorAction SilentlyContinue# 3. 进入项目目录cd D:\code\AnythingLLM# 4. 安装 server 依赖cd server;bun install;cd..# 5. 安装 collector 依赖cd collector;bun install;cd..# 6. 安装 frontend 依赖cd frontend;bun install;cd..# 7. 初始化环境变量bun run setup:envs# 8. 初始化 Prismabun run prisma:generate bun run prisma:migrate# 9. 分别启动三个服务在各自的终端里# Terminal 1cd server;bun run dev# → http://localhost:3001# Terminal 2cd collector;bun run dev# → http://localhost:8888# Terminal 3cd frontend;bun run dev# → http://localhost:3000然后用浏览器访问http://localhost:3000即可。八、总结维度Yarn原生Bun迁移后安装速度慢1-2分钟快~110秒Windows 兼容性部分命令不兼容需要改造脚本多进程启动concurrently 原生支持需用或分开终端Prisma 兼容性✅ 正常✅ 正常Bunx 调用Vite 构建✅ 正常✅ 正常整体稳定性稳定稳定需注意进程残留我的建议如果你在 Windows 上开发 AnythingLLM完全可以切换到 Bun速度优势是实打实的。但要注意两点每次重启前先清理残留进程跨平台的脚本命令需要手动改造参考资料Bun 官方文档AnythingLLM GitHub 仓库Prisma 官方文档作者张大鹏团队大鹏 AI 教育日期2026-05-08我是张大鹏10年全栈开发经验目前专注于AI全栈教育培训。关注我每周分享AI和全栈开发领域的深度实战经验。