Bun 是一个功能丰富的 JavaScript 运行时,它自带包管理功能,还具有工程常用的打包、测试等功能。
Bun 使用 Zig 编程语言开发,基于 Safari 浏览器的 JavaScriptCore 引擎。
Bun 由 Zig 语言和 JavaScriptCore 引擎构成
如果用一个字表达 Bun 的特点,那就是:快!
Bun 原生支持 TypeScript,可以直接运行 .ts 和 .tsx 文件。
bun run index.tsx
安装
在 Linux 或 macOS 系统的安装命令如下:
$ curl -fsSL https://bun.sh/install | bash
# to install a specific version
$ curl -fsSL https://bun.sh/install | bash -s "bun-v1.0.0"
在 Windows 平台的安装命令是:
> powershell -c "irm bun.sh/install.ps1 | iex"
检查是否安装成功,执行 bun --version 命令:
$ bun --version
1.1.36
执行 bun --revision,可以查看对应的提交哈希值:
$ bun --revision
1.1.36+ededc168c
如果要升级,执行 upgrade 命令:
$ bun upgrade
如果你不想玩 Bun 了,执行如下命令删除它:
# for macOS, Linux, and WSL
$ rm -rf ~/.bun
# for Windows
> powershell -c ~\.bun\uninstall.ps1
快速起步
我们使用内置的 Bun.serve API,编写一个 HTTP 服务器,感受一下它的用法。
首先,创建空白目录。
$ mkdir quickstart
$ cd quickstart
执行 bun init 搭建项目脚手架,全部选择默认值。
$ bun init
bun init 创建项目脚手架
可以看到,命令生成的文件结构如下:
$ tree -L 2
.
├── README.md
├── bun.lockb # 版本锁定文件(二进制)
├── index.ts # 入口文件
├── node_modules # 依赖包目录
│ ├── @types
│ ├── bun-types
│ ├── typescript
│ └── undici-types
├── package.json
└── tsconfig.json # TypeScript 配置文件
修改 index.ts 文件,将其修改为如下代码:
// create a simple http server with port 3000
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response('Bun!');
}
})
console.log(`Listening on http://localhost:${server.port} ...`);
在终端启动服务器:
$ bun index.ts
启动 HTTP 服务器
在浏览器访问 http://localhost:3000,就能看到服务器的响应:
在浏览器访问服务器地址
可以在 package.json 中增加一个 npm 脚本:
{
"scripts": {
"start": "bun index.ts"
}
}
然后执行 bun run start,也可以同样启动服务器。
bun run start ,执行脚本
安装依赖
为了让服务器更加有趣,我们可以安装一个 figlet 包和它的类型声明文件。figlet 的作用是创建 ASCII 艺术字体。
$ bun add figlet
$ bun add -d @types/figlet # TypeScript users only
修改 index.ts 文件,在响应中使用 figlet 绘制 ASCII 艺术字体。
import figlet from 'figlet';
const server = Bun.serve({
port: 3000,
fetch(req) {
const body = figlet.textSync('Bun!');
return new Response(body);
},
});
console.log(
`Listening on http://localhost:${server.port} ...`
);
再次启动服务器,会看到如下输出:
____ _
| __ ) _ _ _ __ | |
| _ \| | | | '_ \| |
| |_) | |_| | | | |_|
|____/ \__,_|_| |_(_)
浏览器看到的响应内容
启动代码时,总体感觉是真的很快,几乎没有延迟。
常见命令
- bun run start 运行 start 脚本
- bun add
安装项目依赖 - bun build ./index.tsx 为浏览器构建项目
- bun test 运行测试用例
- bunx cowsay 'Hello, world!' 执行一个包
bunx 可以执行远程包的代码,作用类似 npx。举个例子,使用 bunx 命令在终端生成一幅牛说话的漫画。
bunx 执行远程包
参考链接
- https://bun.sh/docs
- https://bun.sh/docs/quickstart
- https://www.npmjs.com/package/figlet