Sublime Text无法直接用Bun运行JS,因其不支持自动识别Bun且Bun与Node的ESM、require行为不兼容;需手动配置绝对路径的.sublime-build文件,并注意模块导入、内置模块缺失及进程退出等问题。

为什么不能直接在Sublime Text里用Bun跑JS
Sublime Text本身不支持直接集成Bun作为构建系统,它只认标准的node或npm命令路径,而bun run的行为和Node不完全兼容——比如不自动读取package.json的type: "module",也不默认启用ESM顶层await。直接把bun当node替换掉,大概率会遇到ReferenceError: require is not defined或Cannot use import statement outside a module。
如何配置Sublime Text的Build System调用Bun
得手动写一个.sublime-build文件,关键点是路径必须绝对、参数要显式指定、且需区分脚本类型:
- Windows用户必须用
C:\Program Files\Bun\bin\bun.exe这类完整路径,不能只写bun(Sublime默认不读%PATH%) - macOS/Linux要确认
bun在/usr/local/bin/bun或~/.bun/bin/bun,并在path字段里填全 -
cmd数组里必须写["bun", "run", "$file"],不能省略run——bun $file对ESM文件会失败 - 如果脚本依赖
process.argv,记得加"shell": false,否则参数会被shell转义
示例Bun.sublime-build内容:
{
"cmd": ["bun", "run", "$file"],
"path": "/usr/local/bin",
"selector": "source.js",
"shell": false
}
Bun运行时常见报错及对应修复
不是所有JS文件都能“扔进Bun就跑”,尤其从Node迁移过来的脚本:
-
ERR_UNSUPPORTED_ESM_URL_SCHEME:说明你用了import fs from 'fs'但没加.js后缀——Bun要求ESM中显式写import fs from 'fs'或import { readFileSync } from 'fs',不能靠Node的自动解析 -
Cannot find module 'path':Bun默认不polyfill Node内置模块,得改用import { join } from 'path'或装@types/node并配tsconfig.json - 执行完立刻退出、看不到输出?在脚本末尾加
await Bun.sleep(0)或process.stdin.resume()防止Bun提前释放进程
比Node快,但别盲目替换所有场景
Bun快在启动和模块解析,但实际脚本逻辑性能差异不大;它目前不支持node-gyp编译的原生模块,也不兼容vm.Script等高级API。如果你的脚本重度依赖sqlite3、canvas或动态eval,Bun反而会挂。临时调试小工具、CLI原型、JSON处理脚本——这些才是它的舒适区。
真正容易被忽略的是:Bun的require行为是“尽力模拟”,不是1:1复刻,哪怕加了--loader ts-node,TypeScript支持也远不如ts-node稳定。


















