Bun คืออะไร? + เร็วแรงทะลุนรก จริงมั้ย?

ช่วงเดือนที่ผ่านมา เรียกได้มากระแส Bun ค่อนข้างดี หลังจากที่ออก Bun 1.0 เรียกได้ว่าหลายๆ อย่างเร็วกว่า Node.js มาก ถึงขนาดมีดราม่าเล็กๆ น้อยๆ เกี่ยวกับ Performance ของ Node.js
Bun คืออะไร?
Bun เป็น JavaScript/TypeScript toolkit ที่รวมๆ หลายๆ อย่างไว้ในตัวเดียว ตัว core ของ Bun คือ
- เป็น Bun Runtime คือ JavaScript Runtime แบบเดียวกับ Node.js และ Deno
- เป็น Command Line ที่เอาไว้รันพวก test, script และก็รองรับ node package manager อื่นๆ ได้หมดเลย
- เป็น package manager แทนที่ NPM, Yarn หรือ PNPM ได้เลย แถมเร็วกว่ามากๆ
เราสามารถใช้ Bun แทน Node.js ได้เลย ตัวอย่างเช่น ปกติ เรารัน Node แบบนี้
node app.js
ตัว Bun เราก็รันแบบเดียวันก
bun run app.js
รวมถึงสามารถรัน TypeScript หรือ JSX/TSX ได้โดยที่ไม่ต้อง config อะไรเลย
bun run app.ts
bun run App.jsx
ทำไมต้อง Bun?
bunx
เร็วกว่าnpx
5 เท่า- bun อ่านไฟล์
.env
ได้เลย โดยไม่ต้องใช้dotenv
หรือcross-env
ช่วย - ตัว bun มี built-in watch mode ให้แล้ว พวก nodemon pm2
- bun เป็น transpiler ในตัว สามารถรัน JS/TS JSX/TSX ได้เลย
- เป็น Bundler tool ในตัวเอง ไม่ต้องใช้ esbuild, webpack, rollup
- มาแทนที่ package manager ได้เลย
รูปจาก blog bun เพื่อแสดงถึงเวลาที่ใช้ในการติดตั้ง remix project
การติดตั้ง Bun
การติดตั้ง Bun สามารถทำผ่าน Command Line ได้เลย หรือจะใช้ npm, homebrew ก้ได้เช่นกัน
curl -fsSL https://bun.sh/install | bash
ติดตั้งผ่าน NPM
npm install -g bun
ติดตั้งผ่าน Homebrew
brew tap oven-sh/bun # for macOS and Linuxbrew install bun
คำสั่ง Bun เบื้องต้น
จริงๆ แล้ว ก็ง่ายๆ เราใช้คำสั่ง npm แบบไหน ก็เปลี่ยนจาก npm เป็น bun แค่นั้นเอง
การติดตั้ง package ก็ใช้คำสั่ง:
bun installbun install <package>
ปกติ package manager อื่นๆจะสร้าง package-lock.json
, yarn.lock
หรือ pnpm-lock.json
แต่ตัว bun จะเป็น binary lockfile ชื่อ bun.lockb
แทน
.npmrc
ปกติ npm จะใช้ .npmrc
สำหรับ private registries ต่างๆ แต่ถ้าเป็น Bun จะเป็นไฟล์ bunfig.toml
แทน
ตัวอย่าง Github Action Pipeline ของ Bun
name: bun-typesjobs: build: name: build-app runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v3 - name: Install bun uses: oven-sh/setup-bun@v1 - name: Install dependencies run: bun install - name: Build app run: bun run build
Bun HTTP Server
ตอนที่ลองใช้ Node.js ก็เริ่มต้นด้วยการทำ HTTP Server ทีนี้ Bun ก็อยากลองการเป็น JavaScript Runtime บ้าง ลองสร้าง HTTP Server ด้วย Bun ขึ้นมาดีกว่า โดยใช้ Bun.serve
สร้างไฟล์ app.ts
ขึ้นมา
Bun.serve({ port: 3333, fetch(req) { const url = new URL(req.url) if (url.pathname === '/') return new Response('Home page!') if (url.pathname === '/blog') return new Response('Blog!') return new Response('404!') }})
ลองรันด้วย Bun
bun run app.ts
ถ้าเราไม่กำหนด port จะเป็น default 3000 ทดสอบลองเข้า url
http://localhost:3333/http://localhost:3333/blog
Web Framework ของ Bun ที่น่าสนใจ
แหล่งเรียนรู้เพิ่มเติม
สรุป
ส่วนตัวผม ยังไม่ได้เอามาใช้แทน Node.js แต่เอามาใช้ในการติดตั้งพวก package ต่างๆ ถือว่าเร็วมากๆ ประหยัดเวลาไปได้เยอะเลย แต่บางครั้ง ยังเจอปัญหา bun create พวก app ต่างๆ บางอันก็ยังไม่รองรับแบบ 100% และก็ Bun API ผมยังไม่ได้ทดสอบดูเท่าไหร่ครับ
ใครยังไม่ได้ลองใช้ ก็ลองไปใช้ Bun ดูครับ แล้วอาจจะติดใจ
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust