背景
要在 Windows 上用 bun,却发现本机 bun 是坏的。朋友自己折腾了 30 分钟、重试了两次都没搞定。我接手后 10 分钟内解决。这篇记录的不是“装 bun 的步骤”,而是为什么前面两次都失败、以及如何快速定位真正的问题。
症状:bun 明明“存在”,却跑不起来
$ bun --version
/c/Users/peini/AppData/Local/pnpm/bun: line 17: C:\Users\peini\AppData\Local\pnpm/global/5/.pnpm/bun@1.4.0/node_modules/bun/bin/bun.exe: No such file or directory
关键信息不在 bun 这两个字,而在后面那一整串路径。这个报错翻译成人话是:
有个脚本(shim)想帮你启动 bun.exe,但这个 .exe 文件已经不在了。
定位:这不是 bun 的问题,是 pnpm 的问题
顺着报错路径逐层确认:
which bun→/c/Users/peini/AppData/Local/pnpm/bun,说明bun是一个 pnpm 全局 shim 脚本,不是真正的可执行文件;- 打开这个脚本,第 17 行去执行
global/5/.pnpm/bun@1.4.0/node_modules/bun/bin/bun.exe—— 这个 .exe 已经不存在; pnpm rm -g bun报错ERR_PNPM_CANNOT_REMOVE_MISSING_DEPS—— 包早就被移除了,但 6 个 shim 文件残留(bun/bunx各 3 个:无后缀、.CMD、.ps1),外加 pnpm store 里的@oven+bun-windows-x64@1.4.0残留目录。
pnpm(npm 也一样)全局安装的“命令”,本质是 node_modules 里的一个包 + 一层 shim 脚本。 包删了、shim 没删,命令就变成一具空壳——which 能找到它,一执行就报“找不到文件”。
为什么重装两次还是失败
如果用 pnpm add -g bun 重装,装的还是同一个 global 目录:
- 旧的坏 shim 如果还排在 PATH 前面,
which bun依旧命中坏壳,看起来“装了还是不行”; - 即便 shim 被覆盖,只要 store 路径里的
.exe始终没正确落地,报错一字不差。
重装前先确认“清理干净”、重装后再确认“which 指向了新二进制“,否则就是在同一个坑里反复跳。
清理残留
cd /c/Users/peini/AppData/Local/pnpm
rm -f bun bun.CMD bun.ps1 bunx bunx.CMD bunx.ps1
rm -rf global/5/.pnpm/@oven+bun-windows-x64@1.4.0
官方安装器:卡死了,但别急着关
用 bun 官方安装器(Windows 推荐 PowerShell 方式):
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm bun.sh/install.ps1 | iex"
跑了 120 秒超时。但检查 ~/.bun/bin,发现目录里已经有东西了:
bun-windows-x64.zip # 25MB,下载完成但还没解压
bunx.exe # 88MB,完整可用的 PE 可执行文件
安装器卡死 ≠ 安装失败。先看看它到底完成了多少——很多安装器是边下边生效的,半途超时的那份可能已经把关键文件落地了。与其傻等,不如检查半成品。
妙手:bunx.exe 就是 bun.exe
bun 的 Windows 发行包里,bun.exe 和 bunx.exe 是同一个二进制,靠被调用的文件名(argv[0])决定以 bun 还是 bunx 模式运行。所以既然 bunx.exe 完整落地,完整的 bun 二进制就已经到手了:
cd ~/.bun/bin
cp bunx.exe bun.exe # 复制出一份 bun
rm -f bun-windows-x64.zip # 损坏的 zip,删掉(被 Defender 占用就重启后再删,不影响使用)
验证
$ bun --version
1.4.0
$ bun add cowsay # 真实装一个包,验证 npm registry 链路
33 packages installed [6.54s]
bun 命令恢复正常,包安装也通了。
复盘:10 分钟 vs 30 分钟,差在哪
- 读全报错信息。报错里那串路径就是答案,别停在“bun 用不了”这句表象上;
- 分图层定位。命令(shim)→ 二进制(.exe)→ 运行时,逐层确认到底哪一层断了;
- 重装前先清场。残留 shim 会让重装“看起来失败”,其实只是旧壳挡路;
- 安装器卡住先看半成品。
bunx.exe已经落地,就不需要从头再来。
最后一点建议:如果之前是用 pnpm add -g bun 装的,后续更新建议改用官方安装器(装到 ~/.bun/bin)并配合 bun upgrade,避免再踩 pnpm 全局 shim 的坑。