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)

+ typescript@5.8.3
+ @types/bun@1.2.15

5 packages installed [4.16s]

// 增加依赖包
bun add @noble/secp256k1
bun add v1.2.14 (6a363a38)

installed @noble/secp256k1@2.2.3


// 查看项目配置文件
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设计的主要目标和改进之处。

相关推荐
红尘散仙4 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
小陈同学呦4 小时前
前端如何处理订单状态导航的数据竞态问题
前端·javascript
开发者每周简报5 小时前
网海三部曲·无名宗师传
javascript·人工智能
卷毛的技术笔记5 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆5 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪5 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6166 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364576 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao6 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
之歆7 小时前
Day01_ES6+ 专业指南:从基础到实战的现代JavaScript开发(下)
前端·javascript·es6