bun init
使用 bun init
可以搭建一个新项目,类似于 npm init
,同样,bun init
也可以接收 -y
/--yes
的参数,同样类似于 npm init -y
。
bash
bun init
工作原理
- 先创建一些默认文件
- 包文件:带 name 属性的
package.json
- 语言配置文件:
jsconfig.json
/tsconfig.json
:取决于package.json
文件的入口文件为.js
还是.ts
- 入口文件:
index.ts
/index.js
- README 文件:
README.md
- 包文件:带 name 属性的
- 运行
bun install
安装@types/bun
bun create
使用 bun create
可以通过一个模板创建一个新项目,模板包括:npm 包、GitHub 存储库、本地模板。
通过 npm 包创建
bash
bun create <template> [<destination>]
此命令会从 npm 中下载并执行 create-<template>
包。
通过 GitHub 创建
bash
# 下载库
bun create <user>/<repo>
bun create github.com/<user>/<repo>
# 下载文件夹
bun create <user>/<repo> mydir
bun create github.com/<user>/<repo> mydir
Bun 会执行以下步骤:
-
下载模板
-
将所有模板文件复制到目标文件夹中
-
使用
bun install
-
初始化新的 Git 存储库
使用
--no-git
选择退出 -
运行模板的配置
start
脚本(如果已定义)
默认情况下,Bun 不会覆盖任何现有文件。
可以使用
--force
覆盖现有文件。
通过本地模板创建
⚠通过本地模板创建会删除目标文件夹。
Bun 的模板化器可以扩展为支持在本地文件系统上定义的自定义模板。这些模板应位于以下目录之一中:
$HOME/.bun-create/<name>
:全局模板<project root>/.bun-create/<name>
:项目特定模板
可以通过设置
BUN_CREATE_DIR
环境变量来自定义全局模板路径。
创建的步骤分为两步:
-
自定义本地模板(如果已有则跳过)
进入
$HOME/.bun-create/<name>
目录,创建一个package.json
文件并添加 name 属性为自定义的名称(例如:bun-template
)。 -
在要创建文件的目录运行
bun create <name>
高级配置
可以在本地模板的 package.json
中配置一些脚本。
json
{
"bun-create": {
// 安装依赖前运行
"preinstall": "echo 'Installing...'", // 单一命令
// 安装依赖后运行
"postinstall": ["echo 'Done!'"], // 多个命令
}
}
命令参数
参数 | 描述 |
---|---|
--force |
覆盖现有文件 |
--no-install |
跳过安装 node_modules 和任务 |
--no-git |
不要初始化 git 仓库 |
--open |
完成后启动在浏览器内打开 |
环境变量
名称 | 描述 |
---|---|
GITHUB_API_DOMAIN |
如果您使用的是 GitHub 企业或代理,则可以自定义 GitHub 域 Bun ping 以供下载 |
GITHUB_ACCESS_TOKEN |
这允许 bun create 使用私有存储库,或者如果您受到速率限制 |
工作原理
-
npm
-
GET
registry.npmjs.org/@bun-examples/${template}/latest
并解析 -
GET
registry.npmjs.org/@bun-examples/${template}/-/${template}-${latestVersion}.tgz
-
解压缩并提取
${template}-${latestVersion}.tgz
到${destination}
如果存在会覆盖的文件,警告并退出,除非
--force
强制覆盖。
-
-
GitHub
-
从 GitHub 的 API 下载压缩包
-
解压缩并提取到
${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 正常工作
-
-
自动检测 npm 客户端,首选
pnpm
,yarn
(v1),最后npm
-
使用 npm 客户端运行定义
"bun-create": { "preinstall" }
的所有任务 -
除非
--no-install
或package.json
中没有依赖项,否则运行${npmClient} install
-
使用 npm 客户端运行定义
"bun-create": { "postinstall" }
的所有任务 -
运行
git init; git add -A .; git commit -am "Initial Commit";
-
重命名
gitignore
为.gitignore
NPM 会自动删除
.gitignore
文件,使其不出现在包中 -
如果存在依赖项,则在安装
node_modules
时,它会在单独的线程中并发运行 -
使用 libgit2(如果可用)在微基准测试中进行了测试,执行速度慢了 3 倍
-
-