跳到主要内容

bun

  • Bun 是用于运行 JavaScript 和 TypeScript 应用程序的集成工具包
    • 是一种快速 JavaScript 运行时,可直接替换 Node.js
  • Bun底层采用 JavaScriptCore 引擎,大大减少了启动时间和内存使用量
    • 该引擎由 Apple 为 Safari 开发 【Safari 浏览器的引擎】
  • Bun 集成了包管理器、打包工具、测试运行器和 TypeScript 支持
    • Bun 的安装速度比 npm、yarn 和 pnpm 快几十倍 【25倍】
  • Bun也支持monorepo多包管理

包管理器使用​

bash
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
  • 启用
bash
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命令
bash
bun --filter '*' dev

cwd​

  • --cwd 指定当前工作目录
bash
bun add --cwd=./packages/client lodash-es

子包引入共同子包​

  • 方式1:添加@my-app/common子包
bash
cd packages/client
bun add @my-app/common@workspace:*
  • 方式2,利用--cwd
bash
bun add --cwd=./packages/client @my-app/common@workspace:*

catalog​

  • catalog: 是 Bun workspace 的“统一版本目录”引用语法

根目录中定义版本:

json
{
"workspaces": {
"catalog": {
"vite": "^8.1.3"
}
}
}

子项目写:

json
{
"devDependencies": {
"vite": "catalog:"
}
}