概述
本文是笔者的系列博文 《Bun技术评估》 中的第二篇。
本文主要探讨的内容,是从一个初步接触这一技术的开发者的角度,来看看,如何开始bun技术的应用和开发工作。
这一部分的内容比较简单,一般情况下,讨论一个开发相关的技术、工具或者框架的基础部分,无非就是安装、配置、执行,和开发项目的初始化、配置和启动这么几个方面。其他的内容还应该包括官方主站、技术社区和技术文档系统等等。后者展示了这个技术系统的完整性和成熟性,对技术的稳定发展有非常重要的作用。
技术社区
bun技术的官方网站是: bun.sh。 这也比较独特,非常技术范,是ssh的意思吗?
这个站点中,包括了Docs文档,Reference参考资料,Guides手册,Blog技术博客,Discord讨论群社区和Git项目(github.com/oven-sh/bun...%25E3%2580%2582%25E5%2586%2585%25E5%25AE%25B9%25E6%259D%25BF%25E5%259D%2597%25E6%25B8%2585%25E6%2599%25B0%25E7%25AE%2580%25E6%25B4%2581%25EF%25BC%258C%25E5%2585%25B6%25E4%25B8%25AD%25E6%259C%2589%25E5%25BE%2588%25E5%25A4%259A%25E6%259C%2589%25E4%25BB%25B7%25E5%2580%25BC%25E6%259C%2589%25E8%25B6%25A3%25E7%259A%2584%25E6%259D%2590%25E6%2596%2599%25EF%25BC%2588%25E6%25AF%2594%25E5%25A6%2582%25E6%2580%25A7%25E8%2583%25BD%25E5%25AF%25B9%25E6%25AF%2594%25E3%2580%2581%25E5%259C%25BA%25E6%2599%25AF%25E5%258C%2596%25E7%259A%2584%25E6%25A0%25B8%25E5%25BF%2583%25E7%25A4%25BA%25E4%25BE%258B%25E4%25BB%25A3%25E7%25A0%2581%25EF%25BC%2589%25EF%25BC%258C%25E5%2585%25B8%25E5%259E%258B%25E7%259A%2584%25E4%25BA%25BA%25E7%258B%25A0%25E8%25AF%259D%25E4%25B8%258D%25E5%25A4%259A(%25E4%25B8%258B%25E5%259B%25BE)%25E3%2580%2582 "https://github.com/oven-sh/bun)%E3%80%82%E5%86%85%E5%AE%B9%E6%9D%BF%E5%9D%97%E6%B8%85%E6%99%B0%E7%AE%80%E6%B4%81%EF%BC%8C%E5%85%B6%E4%B8%AD%E6%9C%89%E5%BE%88%E5%A4%9A%E6%9C%89%E4%BB%B7%E5%80%BC%E6%9C%89%E8%B6%A3%E7%9A%84%E6%9D%90%E6%96%99%EF%BC%88%E6%AF%94%E5%A6%82%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94%E3%80%81%E5%9C%BA%E6%99%AF%E5%8C%96%E7%9A%84%E6%A0%B8%E5%BF%83%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81%EF%BC%89%EF%BC%8C%E5%85%B8%E5%9E%8B%E7%9A%84%E4%BA%BA%E7%8B%A0%E8%AF%9D%E4%B8%8D%E5%A4%9A(%E4%B8%8B%E5%9B%BE)%E3%80%82")

安装
开发者根据自己的情况和需求,可以选择很多种安装bun的方式,包括脚本安装、可执行文件和npm等等。
- 脚本安装
在bun官网的首页,就有bun的建议安装方式如下,这是一种在线的脚本执行的安装方式:
js
// linux系统, shell脚本
curl -fsSL https://bun.sh/install | bash
// windows系统, powershell脚本
powershell -c "irm bun.sh/install.ps1 | iex"
// 安装后检查
bun --version
1.2.10
// 自举升级
bun upgrade
Bun v1.2.15 is out! You're on v1.2.10
[16.40s] Upgraded.
Welcome to Bun v1.2.15!
What's new in Bun v1.2.15:
https://bun.sh/blog/release-notes/bun-v1.2.15
Report any bugs:
https://github.com/oven-sh/bun/issues
Commit log:
https://github.com/oven-sh/bun/compare/bun-v1.2.10...bun-v1.2.15
感兴趣的读者,甚至还可以看到,这个安装脚本的内容。
- 可执行文件
除了官方标准的脚本文件安装方式之外,作为单一可执行文件,bun其实是可以直接下载安装的。比如:
这个下载下来解压之后,就是标准的AMD64架构的Linux操作系统的预编译文件,是可以直接执行的。这里面还有很多的选项关键字,包括操作系统、指令集、版本等的排列组合:
_ Linux: 指Linux内核和操作系统
_ Windows: Windows操作系统
_ Darwin: MacOS操作系统(苹果电脑)
_ x64: 指CPU架构是AMD64,包括64位的AMD和Intel CPU,主要指令集是X86
_ aarch64: 64位ARM指令集,Linux和MacOS都有相关CPU和版本
_ baseline: 指比较早期的版本,比如如果是x64,指支持4代以前的CPU
_ musl: 自带而非使用系统级别的GLIBC库,比如支持比较老版本内核的Linux系统
简单而言,就是支持主流的指令集架构和操作系统,但是比较新的版本,而且不支持32位的系统。
这种安装方式,非常适合于快速的生产环境部署,包括docker和云计算环境,包括不方便连接互联网配置的场合(相对而言,node和npm都不是那么方便了)。
- npm
最后,对于现有的node开发者,还有一种比较偏门但是非常方便的方式:npm。 如下面的指令也可以用于安装bun:
shell
npm i bun -g
这种安装方式,显然适合于现有的Nodejs开发环境。
执行
和nodejs一样, bun也是可以直接执行一个js程序文件的。所以,在确认bun正常安装之后,就可以直接以js或者ts文件名作为参数,来执行对应的程序。简单的程序,无须项目管理和编译过程,非常简单直观:
shell
// 检查bun的执行,和主要帮助信息
bun
Bun is a fast JavaScript runtime, package manager, bundler, and test runner. (1.2.10+db2e7d7f7)
...
// 编写ts文件
echo 'console.log("Hell Bun")' > b.ts
// 执行ts文件
bun b.ts
Hell Bun
// 或者使用run指令执行
bun run b.ts
// 进入repl环境
bun repl
Welcome to Bun v1.2.14
Type ".help" for more information.
[!] Please note that the REPL implementation is still experimental!
Don't consider it to be representative of the stability or behavior of Bun overall.
、、
> require("crypto").createHash("SHA256").update("bun").digest("hex")
'08d1082cc8d85a0833da8815ff1574675c415760e0aff7fb4e32de6de27faf86'
.exit
是的,bun也可以支持REPL,在这个交互环境中,是可以直接执行js代码和指令,并可以立刻看到执行结果的,开发者借助此特性快速的完成一些概念和代码验证,这在开发过程中是非常实用的功能。
除了直接执行之外,通常在开发项目当中,可以使用脚本执行的方式。其实现和定义也和nodejs非常类似,都是在项目的package.json项目配置文件当中设置。下面是一些简单的例子:
package.json
...
"scripts": {
"start": "bun index.ts",
"dev": "bun run index.ts",
"build": "bun build src/index.ts --outdir dist",
"test": "bun test"
}
...
这些脚本的定义和执行也很好理解。如 bun run start,就会在当前项目中,执行bun index.ts 这一脚本指令。方式和nodejs几乎相同。通常的执行指令包括start、debug、build、test等等,满足在应用开发、测试、建构等不同阶段的执行需求,简化和标准化相关操作。
BUN项目
bun项目规划中,有一个设计目标就是可以替代npm的功能,所以,基本上,可以将bun命令当作npm命令来使用。比如如果要正式开发一个应用项目,可以使用bun来完成项目初始化、添加包库、设置项目执行脚本、测试脚本等工作。
js
// 项目初始化
mkdir buntest
cd buntest
bun init -y
localhost% bun init -y
+ .gitignore
+ index.ts
+ tsconfig.json (for editor autocomplete)
+ README.md
To get started, run:
bun run index.ts
bun install v1.2.14 (6a363a38)
+ [email protected]
+ @types/[email protected]
5 packages installed [4.16s]
// 增加依赖包
bun add @noble/secp256k1
bun add v1.2.14 (6a363a38)
installed @noble/[email protected]
// 查看项目配置文件
cat package.json
{
"name": "btest",
"module": "index.ts",
"type": "module",
"private": true,
"devDependencies": {
"@types/bun": "latest"
},
"peerDependencies": {
"typescript": "^5"
},
"dependencies": {
"@noble/secp256k1": "^2.2.3"
}
}
上面的代码,展示了实用bun命令,我们可以对项目进行初始化,安装和移除依赖包等日常操作。
理论上而言,bun可以应用npm的体系,直接继承了nodejs的庞大生态。同样,bun也使用package.json来对开发项目进行组织和管理,使nodejs的开发者感觉非常自然和熟悉。
这里有一个稍微有点奇怪的事情,是实用bun init进行初始化的时候,bun会默认安装一些依赖包括 typescript和 @types/bun,这可能是为了保持和nodejs项目的兼容性。笔者的体会和经验是,在大多数情况下,即使是bun初始和开发项目,也可以直接使用node来执行。
配置
细心的读者,可能在前面的叙述过程中发现,好像没有配置相关的内容?
笔者的理解是这样的。Bun基本上是为云计算而设计的运行体系,其核心就是本身就是单一的可执行文件,配置都通过外部指令和参数完成,本身是无状态的,所以就没有或者说需要配置的方式。这应该已经能够适应绝大多数开发和生产环境了。
除了Bun本身的配置之外,对于使用bun进行开发的应用项目,当然就是使用和nodejs程序几乎相同的方式,就是package.json配置文件了。而且里面的定义和内容格式,基本上也是和nodejs相同和兼容的,这里就不再赘述。
小结
本文作为系列文章的第二章,简单介绍了bun开发系统的安装、运行、配置等初始化的相关操作,为后续探讨更深入的开发、调试、测试、部署等等提供了一个入门的认知和基础。
通过本章节,读者除了bun入门操作之外,还应该可以理解到其设计和实现的一些独特之处,特别是和nodejs开发方式相比较,它更强调使用的简单流畅,以及工具的单一和一致性,这些都是bun设计的主要目标和改进之处。