bunx 是 bun x 的别名,安装 bun 时自动带上,等价于 bun 生态里的 npx/yarn dlx:自动安装并执行 npm 包中的可执行文件,无需先手动安装。
核心优势
- 速度:对已在本地安装过的包,启动速度比
npx快约 100 倍(得益于 bun 本身的快速启动特性) - 查找逻辑:与
npx一致,先查本地node_modules,找不到就自动从 npm 拉取安装(存入 bun 全局缓存供复用)
基本使用
bunx cowsay "Hello world!" # 自动安装并执行 cowsay
bunx prisma migrate # 运行 Prisma 迁移
bunx prettier foo.js # 格式化文件
bunx uglify-js@3.14.0 app.js # 指定版本执行包通过 package.json 的 bin 字段声明可执行文件,bunx 执行的就是这些声明的命令。
shebang 处理
默认遵循可执行文件的 shebang。若文件标记 #!/usr/bin/env node,bunx 会拉起一个 node 进程执行;要强制用 bun 运行时执行,加 --bun(必须放在包名之前):
bunx --bun vite dev # 用 bun 运行时强制执行,即使脚本是 node shebang
bunx vite dev --bun # 错误用法,--bun 会被当作传给 vite 的参数常用 flags
| flag | 说明 |
|---|---|
--bun | 强制用 bun 运行时执行,忽略 node shebang |
-p, --package <pkg> | 指定要安装的包名,用于二进制名和包名不一致的场景 |
--no-install | 本地没有该包时不自动安装 |
--verbose | 安装过程输出详细日志 |
--silent | 安装过程静默 |
# 二进制名与包名不同时用 -p 指定
bunx -p @angular/cli ng new my-app
bunx -p renovate renovate-config-validator命令后面直接跟的参数/flag 会原样传给目标可执行文件:
bunx my-cli --foo bar与 npx 的关系
bunx 的定位、查找逻辑、“用完自动清理不留全局污染”的哲学与 npx 完全一致,主要差异是启动速度(依赖 bun 运行时本身更快)和调用方式(bunx 本质是 bun x 的快捷别名)。项目已经用 bun 作为包管理器/运行时时,直接用 bunx 替代 npx 即可,无需额外配置。