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

特性

  • TypeScript 和 JSX — 直接编写 TypeScript 和 JSX。Bun 实时转译所有内容。
  • 顶层 await — 直接在提示符处 await Promise,无需包装在 async 函数中。
  • 语法高亮 — 输入时进行语法高亮。
  • 持久化历史记录 — 历史记录保存到 ~/.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 退出。