bun
- Bun 是用于运行 JavaScript 和 TypeScript 应用程序的集成工具包
- 是一种快速 JavaScript 运行时,可直接替换 Node.js
- Bun底层采用 JavaScriptCore 引擎,大大减少了启动时间和内存使用量
- 该引擎由 Apple 为 Safari 开发 【Safari 浏览器的引擎】
- Bun 集成了包管理器、打包工具、测试运行器和 TypeScript 支持
- Bun 的安装速度比 npm、yarn 和 pnpm 快几十倍 【25倍】
- Bun也支持monorepo多包管理
包管理器使用
bun install
bun add
bun remove
bun update
# bunx是bun x的别名, 它相当于npx或yarn dlx, pnpm dlx
bunx
执行ts/tsx文件
bun可用于执行JavaScript/Typescript文件,package.json脚本、可执行包- 启用热重载,通过
--hot - 启用
bun demo.ts
# 使用bun run来执行源文件
bun run demo.ts
bun run demo.tsx
# 启用热重载
bun run --hot
--hot和--wtach区别
| 特性 | --watch | --hot |
|---|---|---|
| 进程重启 | 硬重启(终止并重新初始化) | 热重载(不终止进程) |
| 全局状态 | 完全重置 | 保留(如globalThis、HTTP实例) |
| 适用场景 | 测试、需完全清理状态的场景 | 服务器开发、需保持状态的场景 |
| 性能影响 | 重启时间短,但可能频繁重建上下文 | 更高效,避免进程初始化开销 |
--hot热重载仅会加载受影响的部分--watch会监听文件变化,重新加载整个应用
monorepo管理
- bun 的多包支持是基于 workspaces 机制实现的
- 项目根目录的 package.json 中定义了 workspaces 字段时,bun 会自动扫描各子包并在执行诸如
bun install时统一处理依赖 - 依赖安装: 只需在根目录运行
bun install,Bun 会自动在所有 workspace 内安装依赖
相关命令
--filter(或-F)标志用于在 monorepo 中按模式选择包
filter
*表示在所有子包中执行dev命令
bun --filter '*' dev
cwd
--cwd指定当前工作目录
bun add --cwd=./packages/client lodash-es
子包引入共同子包
- 方式1:添加@my-app/common子包
cd packages/client
bun add @my-app/common@workspace:*
- 方式2,利用
--cwd
bun add --cwd=./packages/client @my-app/common@workspace:*
catalog
catalog:是 Bun workspace 的“统一版本目录”引用语法
根目录中定义版本:
{
"workspaces": {
"catalog": {
"vite": "^8.1.3"
}
}
}
子项目写:
{
"devDependencies": {
"vite": "catalog:"
}
}