ช่วงเดือนที่ผ่านมา เรียกได้มากระแส 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เร็วกว่าnpx5 เท่า- 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 buildBun 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/blogWeb 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