| 命令 | 时间 |
|---|---|
bun hello.js | 5.2ms |
node hello.js | 25.1ms |
运行文件
使用bun run 执行源文件。
terminal
terminal
run 关键字,使用裸命令,行为完全相同。
terminal
--watch
使用 --watch 标志可以以监听模式运行文件。
terminal
使用 命令末尾的标志会被忽略,并传递给
bun run 时,Bun 的标志如 --watch 应紧跟在 bun 后面。"dev" 脚本本身。运行 package.json 脚本
与
npm run <script> 或 yarn <script> 类似package.json 可以定义很多对应 shell 命令的命名 "scripts"。
package.json
bun run <script> 执行这些脚本。
terminal
bash、sh、zsh。在 Windows 上,Bun 使用 bun shell 来支持类 bash 语法和许多常见命令。
⚡️ Linux 上
npm run 的启动时间约为 170ms;Bun 仅需 6ms。bun <script> 运行,然而如果名称与 Bun 内置命令冲突,内置命令优先。此时请使用更明确的 bun run <script> 执行包脚本。
terminal
bun run。
terminal
bun run clean 会执行 preclean 和 postclean(如果定义)。若 pre<script> 失败,Bun 不会执行主脚本。
--bun
通常 package.json 脚本会引用本地安装的 CLI,如 vite 或 next。这些 CLI 常是带有 shebang 的 JavaScript 文件,表明用 node 执行。
node 执行该脚本。你可用 --bun 标志覆写此行为。对于基于 Node.js 的 CLI,将用 Bun 代替 Node.js 执行。
terminal
过滤执行
在包含多个包的 monorepo 中,可以用--filter 参数一次执行多个包中的脚本。
使用 bun run --filter <name_pattern> <script> 使 <script> 在所有包名匹配 <name_pattern> 的包内执行。
例如,若有包含名为 foo、bar 和 baz 的包子目录,运行
terminal
bar 和 baz 中执行 <script>,而不会在 foo 中执行。
更多详情见文档页 filter。
bun run - 从 stdin 管道执行代码
bun run - 允许从标准输入读取 JavaScript、TypeScript、TSX 或 JSX 代码,并执行,无需先写入临时文件。
terminal
bun run - 把文件重定向给 Bun。例如,把 .js 文件当作 .ts 文件运行:
terminal
bun run - 时,所有代码均视为带 JSX 支持的 TypeScript。
bun run --console-depth
用 --console-depth 标志控制 console.log() 输出中对象检查的深度。
terminal
console.log() 中显示对象的嵌套层数。默认深度是 2。更高的值显示更多嵌套属性,但复杂对象输出可能较冗长。
bun run --smol
在内存受限环境中,使用 --smol 标志以降低内存使用,但会降低性能。
terminal
--smol 标志,故此选项主要适合希望堆增长更缓慢的情况。
解析顺序
绝对路径及以./ 或 .\\ 开头的路径总是作为源文件执行。除非使用 bun run,运行带允许扩展名的文件优先使用该文件,而非 package.json 脚本。
当存在同名 package.json 脚本与文件时,bun run 优先执行 package.json 脚本。完整解析顺序为:
- package.json 脚本,例如
bun run build - 源文件,例如
bun run src/main.js - 项目包中的二进制文件,例如
bun add eslint && bun run eslint - (仅
bun run)系统命令,例如bun run ls
CLI 用法
常规执行选项
不打印脚本命令
如果入口点不存在,则退出且不报错
将参数作为脚本执行。别名:
-e将参数作为脚本执行并打印结果。别名:
-p显示此菜单后退出。别名:
-h工作空间管理
使用 —filter 时显示的脚本输出行数(默认:10)。设置为 0 显示所有行
在匹配该模式的所有工作空间包中运行脚本。别名:
-F在所有工作空间包(来自
package.json 中的 workspaces 字段)中运行脚本运行时及进程控制
强制脚本或包使用 Bun 运行时而非 Node.js(通过软链接 node)。别名:
-b控制
package.json 脚本所用的 shell,支持 bun 或 system使用更少内存,但更频繁地进行垃圾回收
在全局对象上暴露
gc()。对 Bun.gc() 无影响抑制所有自定义弃用警告
决定弃用警告是否导致错误
设置进程标题
强制
Buffer.allocUnsafe(size) 填充为零调用
process.dlopen 时抛出错误,并禁用导出条件 node-addons以下之一:
strict、throw、warn、none,或
warn-with-error-code设置
console.log 对象检查的默认深度(默认:2)开发工作流
文件变更时自动重启进程
在 Bun 运行时、测试运行器或打包器中启用自动重载
在启用 —hot 或 —watch 时,禁止重新加载时清屏
调试
激活 Bun 的调试器
激活 Bun 的调试器,执行前等待连接
激活 Bun 的调试器,在代码第一行设置断点并等待
依赖与模块解析
在其他模块加载之前导入模块。别名:
-r—preload 别名,为 Node.js 兼容性设计
—preload 别名,为 Node.js 兼容性设计
禁用 Bun 运行时自动安装
配置自动安装行为。值为
auto(默认,node_modules 不存在时自动安装),
fallback(缺失包时安装),force(始终安装)执行时自动安装依赖。等同于 —install=fallback
跳过 Bun 运行时中的包陈旧检查,优先从磁盘解析
使用最新匹配版本包,始终检查 npm
传递自定义条件以进行解析
在
package.json 中查找的主要字段,默认依赖于 —target解析文件时保留符号链接
解析主入口点时保留符号链接
默认值:
.tsx,.ts,.jsx,.js,.json转译与语言特性
指定自定义
tsconfig.json,默认 $cwd/tsconfig.json解析时替换 K:V,例如
—define process.env.NODE_ENV:“development”。值以 JSON 格式解析。别名:-d移除函数调用,例如
—drop=console 会移除所有 console.* 调用通过
.ext:loader 解析文件,例如 —loader .js:jsx。有效的加载器包括 js、
jsx、ts、tsx、json、toml、text、
file、wasm、napi。别名:-l禁止在打包器、转译器和运行时执行宏
改变使用经典 JSX 运行时编译 JSX 元素时调用的函数
改变编译 JSX 片段时调用的函数
声明用于导入 jsx 和 jsxs 工厂函数的模块标识符。默认:
reactautomatic(默认)或 classic将 JSX 元素视为具有副作用(禁用纯注释)
忽略诸如
@PURE 的树摇注释网络与安全
设置
Bun.serve 的默认端口加载代码时对 URL 进行预连接
设置 HTTP 头最大字节数,默认 16KiB
设置 DNS 查询结果的默认顺序。有效值:
verbatim(默认)、ipv4first、
ipv6first使用系统的受信任证书颁发机构
使用 OpenSSL 的默认 CA 存储
使用捆绑的 CA 存储
启动时预连接
$REDIS_URL启动时预连接 PostgreSQL
设置 HTTP 请求的默认 User-Agent 头
全局配置与上下文
从指定文件加载环境变量
解析文件 & 入口点的绝对路径。仅更改进程的当前工作目录
指定 Bun 配置文件路径。默认
$cwd/bunfig.toml。别名:-c