Skip to main content
bun repl 会启动一个用于求值 JavaScript 和 TypeScript 表达式的交互式读取-求值-打印循环(REPL)。用它来测试代码片段、探索 API,并进行调试。
terminal

功能

  • TypeScript 和 JSX — 直接书写 TypeScript 和 JSX。Bun 会即时转译所有代码。
  • 顶层 await — 直接在命令行等待 Promise,无需包裹在异步函数中。
  • 语法高亮 — 输入时即时高亮显示语法。
  • 持久化历史 — 历史记录保存到 ~/.bun_repl_history,跨会话保留。
  • Tab 自动补全 — 按 Tab 补全属性名和 REPL 命令。
  • 多行输入 — 未闭合的括号、大括号和圆括号会自动换行继续输入。
  • Node.js 全局变量 — 提供 requiremodule__dirname__filename,相对当前工作目录解析。

特殊变量

REPL 会暴露两个特殊变量,每次求值后会更新。

顶层 await

你可以直接在提示符中对任意表达式使用 await

导入模块

与 Bun 的运行时一样,REPL 同时接受 requireimport:可以在提示符中自由混用 ES 模块和 CommonJS。模块解析使用与 bun run 相同的规则,因此可以从 node_modules、相对路径或 node: 内置模块中导入。
声明会在会话的剩余时间内持续存在,并且可以在不同求值之间重新声明 const/let(这与常规脚本不同),因此可以在迭代过程中重复运行 importrequire 语句。

多行输入

当你在未闭合括号、大括号或圆括号的行按下 Enter,REPL 会自动换行继续。提示符变为 ... 表示续行。
对于更长的多行输入,使用 .editor 进入编辑器模式,所有输入会缓冲直到按 Ctrl+D

REPL 命令

在提示符输入 .help 查看所有可用的 REPL 命令。

快捷键

REPL 支持 Emacs 风格的行编辑。

历史记录

REPL 历史会自动保存到 ~/.bun_repl_history(最多 1000 条)并在每次会话开始时加载。使用上下键浏览。 若要导出历史到其它文件,使用 .save

非交互模式

使用 -e / --eval 以 REPL 语义执行脚本并退出。使用 -p / --print 除执行外会打印结果。
terminal
两个选项使用与交互式 REPL 相同的转换方式,因此像 { a: 1 } 这样的裸对象字面量会被视为对象表达式,而不是块语句。事件循环清空后进程退出(待处理的计时器和 I/O 会先完成)。发生错误时,进程以代码 1 退出。