VSCode GUI启动不继承shell环境变量导致bun --version报错,根本解决法是终端执行code .启动;launch.json需为Node、Bun、Deno分别配置独立type和runtimeExecutable,严禁混用。

VSCode终端里node -v对但bun --version报错
不是Bun没装,是VSCode GUI进程根本没加载你的shell环境变量。双击图标启动的VSCode不继承~/.zshrc或$PROFILE里的PATH变更,哪怕你在终端里执行过bun --version成功,编辑器里照样找不到。
- 验证方式:在VSCode集成终端(
Ctrl+`)里运行echo $PATH,对比系统终端输出,缺了/opt/homebrew/bin或$HOME/.bun/bin就确认问题 - 根治方法:必须从系统终端启动VSCode——在终端执行
code .,而不是点Dock图标 - Windows PowerShell用户额外检查:
Get-ExecutionPolicy若为Restricted,需先运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
launch.json里怎么同时支持Node、Bun、Deno调试
不能共用一个配置,每个运行时必须独立声明type和runtimeExecutable,且权限模型差异导致参数结构完全不同。
- Node.js:用
type: "node",runtimeExecutable填"${env:NVM_BIN}/node"(前提已开terminal.integrated.inheritEnv) - Bun:必须用
type: "pwa-node",runtimeExecutable: "bun",runtimeArgs里加--inspect-brk和入口文件名,比如["--inspect-brk", "index.ts"] - Deno:用
type: "pwa-node"也可,但更稳妥是type: "deno"(需vscode-deno插件),runtimeExecutable指向绝对路径如"/opt/homebrew/bin/deno",且runtimeArgs必须显式带--allow-net等权限
保存文件时自动格式化触发Bun watch反复重启
Bun的--watch默认监听所有.ts/.js文件,而VSCode保存时若启用了editor.formatOnSave,会先写临时文件再覆盖原文件,导致Bun误判为“文件变更”而重启进程,严重时触发EMFILE: too many open files。
- 禁用自动格式化:在项目
.vscode/settings.json中设"editor.formatOnSave": false - 排除监听目录:启动命令加
--watch-ignore node_modules --watch-ignore dist --watch-ignore .git - 别依赖ESLint/Prettier的保存钩子——Bun本身不兼容这些插件的格式化管道,它们的
prettier配置不会被Bun识别
deno.enable设全局导致所有JS项目报错
deno.enable一旦写进用户级settings.json,VSCode会强制所有打开的TS/JS文件走Deno类型检查,require()、__dirname、process.env全标红,这不是插件bug,是设计如此。
- 只允许在项目级生效:必须在项目根目录建
.vscode/settings.json,内容仅{"deno.enable": true} - 初始化快捷方式:按
Cmd+Shift+P→ 输入Deno: Initialize Workspace Configuration,它会自动创建正确路径的配置 - 验证是否生效:打开任意
.ts文件,输入fetch悬停看签名,或Deno.cwd()能跳转定义才算成功
launch.json分配置,格式化靠项目级settings.json关开关。


















