bun create 是可选的——Bun 不需要任何配置即可工作。这个命令存在是为了让上手更快。使用
bun create 创建新的 Bun 项目。它可以从 React 组件、create-<template> npm 包、GitHub 仓库或本地模板创建项目。
要创建空项目,请使用 bun init。
从 React 组件创建
bun create ./MyComponent.tsx 会将已有的 React 组件转变成一个包含热重载和生产构建的一体化开发环境。
🚀 Create React App 的继任者 —
bun create <component> 提供了开发者们喜爱的 Create React App 体验,但配备了现代工具链、更快的构建速度以及后端支持。工作原理
当你运行bun create <component> 时,Bun 会:
- 使用 Bun 的 JavaScript 打包器 分析你的模块图。
- 收集运行该组件所需的所有依赖。
- 扫描入口点导出中是否存在 React 组件。
- 生成包含所需依赖和脚本的
package.json文件,用来运行该组件。 - 使用
bun install --only-missing安装缺失的依赖。 - 生成以下文件:
${component}.html${component}.client.tsx(前端入口点)${component}.css
- 启动前端开发服务器。
在 Bun 中使用 TailwindCSS
TailwindCSS 是一个用于为 Web 应用程序设置样式的实用优先 CSS 框架。 当你运行bun create <component> 时,Bun 会扫描你的 JSX/TSX 文件(以及它导入的任何文件)中的 TailwindCSS 类名。如果 Bun 检测到 TailwindCSS 类名,它会将以下依赖添加到你的 package.json 中:
package.json
bunfig.toml,以便通过 Bun.serve() 使用其 TailwindCSS 插件:
bunfig.toml
${component}.css 文件,并在文件顶部添加 @import "tailwindcss";:
MyComponent.css
在 Bun 中使用 shadcn/ui
shadcn/ui 是一个用于构建 Web 应用程序的组件库工具。
bun create <component> 会扫描是否有任何从 @/components/ui 导入的 shadcn/ui 组件。
如果找到,它会执行:
terminal
shadcn/ui 本身使用 TailwindCSS,bun create 还会将 TailwindCSS 依赖添加到你的 package.json 中,并配置 bunfig.toml,以便通过 Bun.serve() 使用 Bun 的 TailwindCSS 插件,如前文所述。
bun create 还会设置:
tsconfig.json,将"@/*"别名指向"src/*"或.(具体取决于是否存在src/目录)components.json,以便 shadcn/ui 知道这是一个 shadcn/ui 项目styles/globals.css文件,按照 shadcn/ui 的预期配置 Tailwind v4${component}.build.ts文件,该文件使用配置了bun-plugin-tailwind的方式为生产环境构建组件
bun create ./MyComponent.jsx 可以在本地运行由 Claude 或 ChatGPT 等 LLM 生成的代码。
从 npm 创建
terminal
create-<template> 包。以下两个命令是等效的:
terminal
create-<template> 包的文档。对于 react 和 next,Bun 不会运行任何包;它只会打印一条消息,指向 react-app/vite 和 next-app。
从 GitHub 创建
bun create <user>/<repo> 会将 GitHub 仓库的内容下载到磁盘。
terminal
terminal
- 下载模板
- 将所有模板文件复制到目标文件夹
- 使用
bun install安装依赖 - 初始化一个全新的 Git 仓库。使用
--no-git标志可选择退出。
默认情况下,Bun 不会覆盖 已有文件。使用
--force 标志可覆盖这些文件。从本地模板创建
你可以在本地文件系统上定义自定义模板。将它们放在以下目录之一:$HOME/.bun-create/<name>:全局模板目录<项目根目录>/.bun-create/<name>:项目专属模板目录
设置
BUN_CREATE_DIR 环境变量可以更改全局模板路径。$HOME/.bun-create 中创建一个以模板命名的目录。
package.json 文件,内容如下:
package.json
bun create foo,以验证 Bun 是否能找到你的本地模板。
设置逻辑
你可以在本地模板的package.json 的 "bun-create" 字段中指定安装前后运行的脚本。
package.json
preinstall 和 postinstall 接受字符串或字符串数组。数组中的命令会按顺序运行。
克隆模板后,
bun create 会从 package.json 中移除 "bun-create" 部分,然后再将其写入目标文件夹。
参考
CLI 参数
环境变量
关于 bun create 的工作流程
关于 bun create 的工作流程
当你运行
bun create ${template} ${destination} 时,流程如下:如果是远程模板(elysia、elysia-buchta 或 stric;对于任何其他 npm 模板名称,Bun 会将其交给 bunx create-${template} 处理;react 和 next 除外,它们只会打印一条消息,指向 react-app/vite 和 next-app)- GET
registry.npmjs.org/@bun-examples/${template}/latest并解析它 - GET
registry.npmjs.org/@bun-examples/${template}/-/${template}-${latestVersion}.tgz - 将
${template}-${latestVersion}.tgz解压并提取到${destination}- 如果文件将被覆盖,Bun 会警告并退出,除非你传入
--force
- 如果文件将被覆盖,Bun 会警告并退出,除非你传入
- 从 GitHub 的 API 下载 tarball
- 解压并提取到
${destination}- 如果文件将被覆盖,Bun 会警告并退出,除非你传入
--force
- 如果文件将被覆盖,Bun 会警告并退出,除非你传入
- 打开本地模板文件夹
- 递归删除目标目录
- 使用可用的最快系统调用递归复制文件(在 macOS 上使用
fcopyfile;在 Linux 上使用copy_file_range)。如果node_modules文件夹存在,请勿复制或遍历该文件夹(仅此一项就使其速度快于cp)
- 再次解析
package.json,将name更新为${basename(destination)},从package.json中移除bun-create部分,并将更新后的package.json保存到磁盘。 - 运行
"bun-create": { "preinstall" }中定义的任何任务 - 除非你传入
--no-install或package.json中没有依赖,否则运行bun install - 运行
"bun-create": { "postinstall" }中定义的任何任务 - 运行
git init; git add -A .; git commit -am "Initial Commit";- 将
gitignore重命名为.gitignore。npm 会从已发布的包中移除.gitignore文件。 - 如果存在依赖,此步骤会在单独的线程中运行,同时 Bun 安装
node_modules - 我们测试过在可用时使用 libgit2,它在微基准测试中的速度慢了 3 倍
- 将