vscode 中 bun run 不生效是因终端未加载 bun 的 path,需从系统终端执行 code . 启动;调试需用 pwa-node 类型配置 runtimeexecutable 为 "bun" 并加 --inspect-brk;watch 模式与 vscode 保存格式化冲突,建议禁用自动格式化并排除监听目录。

VSCode 里 bun run 不生效,命令找不到怎么办
根本原因是 VSCode 终端没加载 Bun 的 PATH,尤其在 macOS/Linux 上用 zsh/fish、或 Windows 上用 PowerShell 时,Bun 安装路径(比如 /opt/homebrew/bin/bun 或 $HOME/.bun/bin/bun)没进环境变量。
实操建议:
- 先在系统终端运行
bun --version确认安装成功;如果失败,先按 Bun 官网方式重装(推荐用curl -fsSL https://bun.sh/install | bash) - VSCode 启动前必须从终端打开:在终端执行
code .,而不是双击图标 —— 否则它不会继承 shell 的 PATH - Windows 用户若用 PowerShell,检查是否启用了“PowerShell 执行策略限制”,临时允许脚本:运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
调试 JS/TS 项目时 launch.json 怎么配 Bun
Bun 自带调试器,但 VSCode 默认不识别 bun run 或 bun test 为可调试目标,直接套用 Node.js 的配置会卡在 “Waiting for debugger to attach”。
实操建议:
- 调试入口文件(如
index.ts)时,用type: "pwa-node"+runtimeExecutable指向bun可执行文件路径 - 确保
runtimeArgs包含--inspect-brk,且port与 Bun 默认的9229一致 - 示例最小
launch.json片段:
{
"configurations": [{
"type": "pwa-node",
"request": "launch",
"name": "Bun: Launch",
"runtimeExecutable": "bun",
"runtimeArgs": ["--inspect-brk", "index.ts"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}]
}
注意:runtimeExecutable 值写 "bun" 即可(依赖 PATH),不要硬编码绝对路径 —— 否则换机器就失效。
Bun 的 watch 模式和 VSCode 文件监视冲突吗
会。Bun 的 bun run --watch 和 VSCode 的文件保存自动触发(比如 ESLint、Prettier)可能同时改同一文件,导致 Bun 报错 EMFILE: too many open files 或反复重启。
实操建议:
- 禁用 VSCode 的保存时格式化对 JS/TS 文件的影响:在工作区
settings.json加"editor.formatOnSave": false,改用Shift+Alt+F手动触发 - Bun watch 默认监听所有
.ts/.js文件,可通过--watch-ignore排除生成目录(如node_modules、.git、dist) - macOS 用户若遇到频繁重载,检查是否开启了 iCloud 同步项目目录 —— Bun 的 fs.watch 在 iCloud 文件上不可靠
用 Bun 运行测试(bun test)时断点不命中
因为 bun test 默认不启用 V8 inspector,即使你在 launch.json 里配了 --inspect-brk,它也不会转发到测试进程。
实操建议:
- 不要试图直接调试
bun test命令;改用bun run启动一个单独的测试入口文件(比如test-runner.ts),在里面import { test } from "bun:test"并显式调用 - 或者用
bun test --inspect(Bun v1.1+ 支持),再配一个附加(attach)式的 launch 配置,request: "attach",port: 9229 - 注意:Bun 测试运行时是沙箱化的,
console.log输出可能被缓冲,加process.stdout.flush()或用console.error更可靠
真正麻烦的是跨平台路径处理和 import.meta.url 在 Bun 中的行为差异 —— 比如 import.meta.dir 在 Bun 里存在,但在某些老版 VSCode 调试器中可能未正确解析,容易误判模块路径。











