Bun技术评估 - 02 Startup

概述

本文是笔者的系列博文 《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其实是可以直接下载安装的。比如:

github.com/oven-sh/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设计的主要目标和改进之处。

相关推荐
江城开朗的豌豆3 分钟前
JavaScript篇:移动端点击的300ms魔咒:你以为用户手抖?其实是浏览器在搞事情!
前端·javascript·面试
华洛10 分钟前
聊聊我们公司的AI应用工程师每天都干啥?
前端·javascript·vue.js
江城开朗的豌豆10 分钟前
JavaScript篇:你以为事件循环都一样?浏览器和Node的差别让我栽了跟头!
前端·javascript·面试
技术小丁13 分钟前
使用 HTML +JavaScript 从零构建视频帧提取器
javascript·html·音视频
风象南23 分钟前
SpringBoot实现简易直播
java·spring boot·后端
漫谈网络31 分钟前
TypeScript 编译 ES6+ 语法到兼容的 JavaScript介绍
javascript·typescript·es6
这里有鱼汤31 分钟前
有人说10日低点买入法,赢率高达95%?我不信,于是亲自回测了下…
后端·python
bin91531 小时前
DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)
前端·javascript·vue.js·ecmascript·deepseek
江城开朗的豌豆1 小时前
JavaScript篇:反柯里化:让函数'反悔'自己的特异功能,回归普通生活!
前端·javascript·面试
江城开朗的豌豆1 小时前
JavaScript篇:数字千分位格式化:从入门到花式炫技
前端·javascript·面试