您不需要
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(css 文件)
- 自动启动前端开发服务器。
在 Bun 中使用 TailwindCSS
TailwindCSS 是一个非常流行的实用优先的 CSS 框架,用于样式化 Web 应用程序。 当您运行bun create <component> 时,Bun 会扫描您的 JSX/TSX 文件中的 TailwindCSS 类名(以及它导入的任何文件)。如果它检测到 TailwindCSS 类名,它将在您的 package.json 中添加以下依赖:
package.json
bunfig.toml 以使用 Bun 的 TailwindCSS 插件与 Bun.serve()
bunfig.toml
@import "tailwindcss"; 的 ${component}.css 文件:
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 的 TailwindCSS 插件与 Bun.serve(),如上所述。
此外,我们设置以下内容:
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> 包的文档以获取完整的文档和使用说明。
从 GitHub
这将下载 GitHub 仓库的内容到磁盘。terminal
terminal
- 下载模板
- 将所有模板文件复制到目标文件夹
- 使用
bun install安装依赖。 - 初始化一个全新的 Git 仓库。使用
--no-git标志退出。 - 运行模板配置的
start脚本(如果已定义)。
默认情况下,Bun 将_不会覆盖_任何现有文件。使用
--force 标志覆盖现有文件。从本地模板
Bun 的模板器可以扩展以支持在本地文件系统上定义的自定义模板。这些模板应位于以下目录之一:$HOME/.bun-create/<name>: 全局模板<project root>/.bun-create/<name>: 项目特定模板
您可以通过设置
BUN_CREATE_DIR 环境变量来自定义全局模板路径。$HOME/.bun-create 并创建一个以您想要的模板名称命名的新目录。
package.json 文件,内容如下:
package.json
bun create foo 以验证 Bun 是否正确找到您的本地模板。
设置逻辑
您可以在本地模板的package.json 的 "bun-create" 部分中指定预安装和后安装设置脚本。
package.json
| 字段 | 描述 |
|---|---|
postinstall | 安装依赖后运行 |
preinstall | 安装依赖前运行 |
bun create 将在写入目标文件夹之前自动从 package.json 中删除 "bun-create" 部分。
参考
CLI 标志
| 标志 | 描述 |
|---|---|
--force | 覆盖现有文件 |
--no-install | 跳过安装 node_modules 和任务 |
--no-git | 不初始化 git 仓库 |
--open | 完成后启动并在浏览器中打开 |
环境变量
| 名称 | 描述 |
|---|---|
GITHUB_API_DOMAIN | 如果您使用 GitHub 企业版或代理,您可以自定义 Bun 用于下载的 GitHub 域 |
GITHUB_TOKEN (或 GITHUB_ACCESS_TOKEN) | 这让 bun create 可以使用私有仓库或在您受到速率限制时工作。如果两者都存在,会选择 GITHUB_TOKEN 而不是 GITHUB_ACCESS_TOKEN。 |
当您运行
bun create ${template} ${destination} 时,以下是发生的事情:如果是远程模板- GET
registry.npmjs.org/@bun-examples/${template}/latest并解析它 - GET
registry.npmjs.org/@bun-examples/${template}/-/${template}-${latestVersion}.tgz - 解压缩并提取
${template}-${latestVersion}.tgz到${destination}- 如果有会覆盖的文件,警告并退出,除非传递了
--force
- 如果有会覆盖的文件,警告并退出,除非传递了
- 从 GitHub 的 API 下载 tarball
- 解压缩并提取到
${destination}- 如果有会覆盖的文件,警告并退出,除非传递了
--force
- 如果有会覆盖的文件,警告并退出,除非传递了
- 打开本地模板文件夹
- 递归删除目标目录
-
使用可用的最快系统调用复制文件(在 macOS 上是
fcopyfile,在 Linux 上是copy_file_range)。如果存在,不复制或遍历node_modules文件夹(这本身就让它比cp更快) -
解析
package.json(再次!),将name更新为${basename(destination)},从package.json中删除bun-create部分,并保存更新的package.json到磁盘。- 如果检测到 Next.js,将
bun-framework-next添加到依赖列表中 - 如果检测到 Create React App,在
/src/index.{js,jsx,ts,tsx}中添加入口点到public/index.html - 如果检测到 Relay,添加
bun-macro-relay以便 Relay 正常工作
- 如果检测到 Next.js,将
-
自动检测 npm 客户端,优先选择
pnpm、yarn(v1),最后是npm -
使用 npm 客户端运行在
"bun-create": { "preinstall" }中定义的任何任务 -
运行
${npmClient} install,除非传递了--no-install或 package.json 中没有依赖 -
使用 npm 客户端运行在
"bun-create": { "postinstall" }中定义的任何任务 -
运行
git init; git add -A .; git commit -am "Initial Commit";- 将
gitignore重命名为.gitignore。NPM 会自动删除包中出现的.gitignore文件。 - 如果有依赖,这将在单独的线程中并发运行,同时安装 node_modules
- 使用 libgit2(如果可用)在微基准测试中测试过,比原来的慢了 3 倍
- 将