
Bun คือโปรแกรมรัน JavaScript และ TypeScript นอกเบราว์เซอร์ ทำหน้าที่เดียวกับ Node.js แต่รวมเครื่องมือที่ปกติต้องลงแยกกันไว้ในตัวเดียว ทั้งตัวลงแพ็กเกจแบบ npm ตัวรันเทสต์ และตัวรัน TypeScript ติดตั้งครั้งเดียวก็เริ่มเขียนได้เลย
หน้าเว็บของ Bun บอกว่าลงแพ็กเกจเร็วกว่า npm สูงสุด 30 เท่า คู่มือนี้จะพาติดตั้ง Bun บน Windows และ macOS สร้างโปรเจกต์แรก ลงแพ็กเกจ เขียนเทสต์ เปิดเว็บเซิร์ฟเวอร์ แล้ววัดความเร็วเทียบกับ npm ในเครื่องตัวเอง จะได้รู้ว่าตัวเลข 30 เท่ามาจากไหน และเครื่องเราได้เท่าไรจริง
ทุกคำสั่งในบทความนี้รันจริงแล้ว ทดสอบด้วย Bun 1.4.4 (รุ่นล่าสุด ณ 1 พ.ย. 2026) ส่วนคู่มือในคลิปทดสอบบน Windows 11 ด้วย Bun 1.3.14 ผลลัพธ์ที่แสดงคือผลที่ได้จริง แต่ตัวเลขเวลาในเครื่องคุณจะต่างไป
จบบทความนี้คุณจะ:
- อธิบายได้ว่า Bun คืออะไร และต่างจาก Node.js กับ npm ยังไง
- ติดตั้ง Bun บน Windows หรือ macOS แล้วเช็กว่าใช้งานได้
- สร้างโปรเจกต์ ลงแพ็กเกจ เขียนเทสต์ และเปิดเว็บเซิร์ฟเวอร์ด้วย Bun
- วัดความเร็ว
bun installเทียบnpm ciในเครื่องตัวเอง และอ่านตัวเลขบนเว็บได้ถูก - แก้ปัญหาที่เจอบ่อย และถอน Bun ออกจากเครื่องได้
Bun คืออะไร ต่างจาก Node ยังไง
ถ้าเขียน JavaScript ฝั่งเซิร์ฟเวอร์ด้วย Node.js มาก่อน จะคุ้นกับการต้องลงหลายอย่างประกอบกัน Node.js ไว้รันโค้ด npm ไว้ลงแพ็กเกจ Jest หรือ Vitest ไว้รันเทสต์ และตัวแปลง TypeScript อีกตัว Bun รวมทั้งหมดนี้ไว้ในโปรแกรมเดียว
| งาน | ฝั่ง Node.js | ฝั่ง Bun |
|---|---|---|
| รันไฟล์ | node index.js | bun run index.ts |
| ลงแพ็กเกจทั้งหมด | npm install | bun install |
| เพิ่มแพ็กเกจ | npm install zod | bun add zod |
| รันเทสต์ | ต้องลง Jest หรือ Vitest เพิ่ม | bun test มีในตัว |
| รัน TypeScript | ต้องแปลงก่อน หรือลงเครื่องมือเพิ่ม | รันไฟล์ .ts ได้ตรงๆ |

ใช้แทน Node ได้ทุกโปรเจกต์ไหม Bun เข้ากันได้กับแพ็กเกจ npm ส่วนใหญ่ แต่ไม่ใช่ทุกตัว ถ้าโปรเจกต์ของทีมใช้ Node.js อยู่แล้ว ให้ลองกับโปรเจกต์ส่วนตัวก่อน แล้วค่อยย้ายเมื่อมั่นใจว่าทุกอย่างรันได้
Bun เร็วกว่า npm จริงไหม
หน้าแรกของ bun.com เขียนว่าลงแพ็กเกจเร็วกว่า npm "สูงสุด 30 เท่า" ตัวเลขนี้มาจากการทดสอบของทีม Bun เอง บนเงื่อนไขเฉพาะ
| เรื่อง | การทดสอบบนเว็บ bun.com | ที่วัดในคลิปของเรา |
|---|---|---|
| เครื่อง | Linux x64, AMD EPYC 64 vCPU | Windows 11, Intel i7-13650HX |
| โปรเจกต์ | แอป Next.js ราว 220 แพ็กเกจ | 8 dependencies รวม 97 แพ็กเกจ |
| สภาพ | หลายแบบ ตั้งแต่ไม่มี cache ถึงมี cache แล้ว | มี lockfile และ cache แล้ว |
| ผล | เร็วกว่า 5 ถึง 33 เท่า แล้วแต่สภาพ | 1.83 วินาที เทียบ 2.87 วินาที ราว 1.5 เท่า |

สรุปคือ Bun เร็วกว่า npm จริง แต่เร็วกว่ากี่เท่าขึ้นกับเครื่องและโปรเจกต์ ตัวเลข 30 เท่าวัดบนเซิร์ฟเวอร์ Linux แรงๆ ส่วนเครื่อง Windows ทั่วไปอาจได้แค่ราว 1.5 เท่า วิธีที่ดีที่สุดคือวัดเองกับโปรเจกต์ของคุณ ซึ่งมีวิธีอยู่ในหัวข้อวัดความเร็วด้านล่าง
ศัพท์ที่ต้องรู้
| คำ | ความหมายแบบมือใหม่ |
|---|---|
| Runtime | โปรแกรมที่รันโค้ด JavaScript นอกเบราว์เซอร์ เช่น Node.js และ Bun |
| Package | โค้ดสำเร็จรูปที่คนอื่นเขียนไว้ให้ใช้ต่อ |
| Package manager | ตัวโหลดและจัดการแพ็กเกจ เช่น npm และ bun install |
| package.json | ไฟล์บอกว่าโปรเจกต์ใช้แพ็กเกจอะไรบ้าง |
| Lockfile | ไฟล์จำเวอร์ชันแพ็กเกจแบบเป๊ะ ของ Bun ชื่อ bun.lock ทำให้ลงซ้ำได้เหมือนเดิม |
| node_modules | โฟลเดอร์ที่เก็บแพ็กเกจที่โหลดมาแล้ว |
| Test runner | ตัวรันโค้ดที่เช็กว่าโค้ดของเราทำงานถูก |
| Cache | ของที่เคยโหลดแล้วเก็บไว้ ครั้งต่อไปไม่ต้องโหลดใหม่ |
จำง่ายๆ คือ package.json เป็นรายการของ lockfile เป็นรายการแบบเป๊ะทุกเวอร์ชัน ส่วน node_modules คือของจริงที่โหลดมาแล้ว
วิธีติดตั้ง Bun บน Windows และ macOS
คำสั่งทั้งหมดในหัวข้อนี้มาจากหน้า Installation ของ Bun
Windows เปิด PowerShell (กด Start แล้วพิมพ์ PowerShell) แล้ววางคำสั่งนี้
powershell -c "irm bun.sh/install.ps1|iex"macOS และ Linux เปิด Terminal แล้ววางคำสั่งนี้
curl -fsSL https://bun.com/install | bashติดตั้งเสร็จแล้ว ปิดหน้าต่างคำสั่งแล้วเปิดใหม่หนึ่งครั้ง เครื่องถึงจะรู้จักคำสั่ง bun ถ้ามี Node.js อยู่แล้ว จะติดตั้งผ่าน npm ก็ได้ด้วย npm install -g bun
เช็กว่าติดตั้งสำเร็จ
bun --version1.4.4ขึ้นเลขเวอร์ชันแปลว่าใช้ได้แล้ว เลขของคุณอาจใหม่กว่านี้ ถ้าอยากอัปเดตเป็นรุ่นล่าสุดในภายหลัง ใช้ bun upgrade
สร้างโปรเจกต์แรกด้วย bun init
สร้างโฟลเดอร์ฝึก แล้วให้ Bun สร้างโปรเจกต์ให้
mkdir hello-bun
cd hello-bun
bun init -y + .gitignore
+ index.ts
+ tsconfig.json (for bun check and editor autocomplete)
+ README.md
To get started, run:
bun run index.ts-y คือตอบ "ใช่" ให้ทุกข้อ จะได้ไฟล์ package.json, index.ts, bun.lock และโฟลเดอร์ node_modules ลองรันไฟล์แรก
bun run index.tsHello via Bun!ขึ้นข้อความนี้แปลว่า Bun รันไฟล์ TypeScript ได้ตรงๆ โดยไม่ต้องแปลงก่อน ลองเปิด index.ts แก้ข้อความเป็นชื่อตัวเอง แล้วรันอีกรอบ
ลงแพ็กเกจด้วย bun add
ลองเพิ่มแพ็กเกจ zod (ไลบรารีตรวจรูปแบบข้อมูลที่นิยม) เป็นตัวอย่าง
bun add zodinstalled zod@4.6.7
1 package installed [1.77s]เปิด package.json จะเห็นบรรทัด "zod": "^4.6.7" ในส่วน dependencies (เลขเวอร์ชันของคุณอาจต่าง) คำสั่งที่ใช้บ่อยเทียบกับ npm เป็นแบบนี้
| อยากทำ | คำสั่ง Bun | เทียบ npm |
|---|---|---|
| ลงทุกตัวตาม package.json | bun install | npm install |
| เพิ่มแพ็กเกจ | bun add ชื่อ | npm install ชื่อ |
| เพิ่มแบบใช้ตอนพัฒนา | bun add -d ชื่อ | npm install -D ชื่อ |
| ลบแพ็กเกจ | bun remove ชื่อ | npm uninstall ชื่อ |
| รันสคริปต์ใน package.json | bun run ชื่อสคริปต์ | npm run ชื่อสคริปต์ |
ทำไมต้องมี lockfile เพราะเมื่อเพื่อนโหลดโปรเจกต์ไปแล้วพิมพ์ bun install จะได้แพ็กเกจเวอร์ชันเดียวกับเราเป๊ะ ไม่มีปัญหา "เครื่องผมรันได้ แต่เครื่องเพื่อนรันไม่ได้"
เขียนเทสต์ด้วย bun test
เทสต์คือโค้ดที่เช็กว่าโค้ดของเราทำงานถูก แก้โค้ดทีหลังแล้วรันเทสต์ทีเดียว ก็รู้ทันทีว่ามีอะไรพังไหม สร้างไฟล์ฟังก์ชันง่ายๆ ก่อน
export const add = (a: number, b: number) => a + b;แล้วสร้างไฟล์เทสต์
import { test, expect } from "bun:test";
import { add } from "./math";
test("1 + 2 = 3", () => {
expect(add(1, 2)).toBe(3);
});bun testmath.test.ts:
(pass) 1 + 2 = 3 [3.21ms]
1 pass
0 fail
1 expect() calls
Ran 1 test across 1 file. [66.00ms]1 pass 0 fail แปลว่าเทสต์ผ่าน Bun หาไฟล์ที่ชื่อลงท้ายด้วย .test.ts ให้เองโดยไม่ต้องตั้งค่าอะไร ลองเปลี่ยน toBe(3) เป็น toBe(4) แล้วรันใหม่ จะเห็นเทสต์ไม่ผ่านพร้อมบอกว่าคาดว่าได้ 4 แต่ได้ 3
error: expect(received).toBe(expected)
Expected: 4
Received: 3
(fail) 1 + 2 = 3
0 pass
1 failเปิดเว็บเซิร์ฟเวอร์ด้วย Bun
Bun มีคำสั่ง Bun.serve สำหรับเปิดเว็บเซิร์ฟเวอร์อยู่ในตัว ไม่ต้องลง Express หรือแพ็กเกจอื่นเพิ่ม
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response("สวัสดีจาก Bun!");
},
});
console.log(`เปิดแล้วที่ ${server.url}`);bun run server.tsเปิดแล้วที่ http://localhost:3000/เปิดเบราว์เซอร์ไปที่ http://localhost:3000 หรือเปิดหน้าต่างคำสั่งอีกอันแล้วยิงด้วย curl (บน Windows PowerShell พิมพ์ curl.exe ส่วน macOS พิมพ์ curl)
curl.exe localhost:3000สวัสดีจาก Bun!หยุดเซิร์ฟเวอร์ด้วย Ctrl + C ในหน้าต่างแรก ถ้าอยากให้เซิร์ฟเวอร์รีสตาร์ตเองทุกครั้งที่แก้ไฟล์ ให้รันด้วย bun --watch server.ts แทน แก้ข้อความในไฟล์แล้วรีเฟรชเบราว์เซอร์ จะเห็นข้อความใหม่ทันทีโดยไม่ต้องรันใหม่
อยากรู้ว่าเว็บเซิร์ฟเวอร์รับคำขอแล้วตอบกลับยังไงแบบละเอียด ดูได้ในบทความ API Gateway ที่สร้างเซิร์ฟเวอร์คล้ายกันด้วย Node.js
วัดความเร็ว Bun กับ npm ในเครื่องตัวเอง
ต้องมี Node.js และ npm ในเครื่องด้วย ใช้โปรเจกต์จริงของคุณที่มี package.json และ package-lock.json อยู่แล้ว แล้วลบ node_modules ก่อนวัดทุกรอบ
Remove-Item -Recurse -Force node_modules
Measure-Command { npm ci } | Select-Object TotalSeconds
Remove-Item -Recurse -Force node_modules
Measure-Command { bun install } | Select-Object TotalSecondsrm -rf node_modules && time npm ci
rm -rf node_modules && time bun installผลที่วัดได้ในคลิป (Windows 11, i7-13650HX, 8 dependencies รวม 97 แพ็กเกจ มี lockfile และ cache แล้ว)
| รอบ | npm ci | bun install |
|---|---|---|
| รอบ 1 | 2.87 วินาที | 1.83 วินาที |
| รอบ 2 | 2.87 วินาที | 1.82 วินาที |
| รอบ 3 | 2.87 วินาที | 1.96 วินาที |
| ค่ากลาง | 2.87 วินาที | 1.83 วินาที |
วัดให้แฟร์ วัดอย่างน้อย 3 รอบแล้วดูค่ากลาง เพราะรอบแรกมักช้ากว่าเนื่องจากยังไม่มี cache และอย่าเปิดโปรแกรมหนักๆ ระหว่างวัด ตัวเลข 30 เท่าบนเว็บวัดบนเครื่องเซิร์ฟเวอร์ Linux ไม่ใช่ Windows
แบบฝึกและแก้ปัญหา
ลองทำ 5 ข้อนี้ให้ครบ
| ข้อ | ลองทำ | ควรได้ |
|---|---|---|
| 1 | แก้ index.ts ให้พิมพ์ชื่อตัวเอง แล้ว bun run index.ts | เห็นชื่อตัวเอง |
| 2 | ใน math.test.ts เปลี่ยน toBe(3) เป็น toBe(4) แล้ว bun test | 0 pass 1 fail และบอกว่าคาด 4 ได้ 3 |
| 3 | แก้ server.ts ให้ตอบชื่อตัวเอง รันด้วย bun --watch server.ts แล้วแก้ไฟล์อีกรอบ | รีเฟรชแล้วข้อความเปลี่ยนเอง |
| 4 | เพิ่ม "scripts": { "start": "bun run server.ts" } ใน package.json แล้วพิมพ์ bun run start | เซิร์ฟเวอร์เปิด |
| 5 | วัดความเร็วกับโปรเจกต์ของคุณ 3 รอบ | ได้ตัวเลขของเครื่องคุณเอง |
ถ้าเจอปัญหา ดูตารางนี้
| อาการ | น่าจะเป็นเพราะ | ทำยังไง |
|---|---|---|
| bun ไม่รู้จักคำสั่ง | ยังไม่เปิดหน้าต่างใหม่หลังติดตั้ง | ปิดทุกหน้าต่างคำสั่งแล้วเปิดใหม่ หรือรีสตาร์ตเครื่อง |
| สคริปต์ติดตั้งถูกบล็อก (Windows) | นโยบายความปลอดภัยของ PowerShell | ติดตั้งด้วย npm install -g bun แทน |
| EADDRINUSE หรือ port 3000 ถูกใช้ | มีโปรแกรมอื่นใช้พอร์ตอยู่ | ปิดตัวเก่า หรือเปลี่ยน port เป็น 3001 |
| curl ฟ้อง error ใน PowerShell | พิมพ์ curl แทน curl.exe | ใช้ curl.exe |
| ภาษาไทยเพี้ยนในหน้าต่างคำสั่ง | ฟอนต์หรือโค้ดเพจของหน้าต่าง | ดูในเบราว์เซอร์แทน หรือใช้ Windows Terminal |
| แพ็กเกจบางตัวรันไม่ได้ | ใช้ฟีเจอร์ของ Node ที่ Bun ยังไม่รองรับ | ใช้ Node.js กับโปรเจกต์นั้นไปก่อน |
| bun install ช้ากว่า npm | รอบแรกยังไม่มี cache หรือดิสก์ช้า | วัดรอบ 2–3 แล้วดูค่ากลาง |
ถอนการติดตั้ง Bun
ลบโปรเจกต์ฝึกได้เลยด้วยการลบโฟลเดอร์ hello-bun ทิ้ง ไม่มีอะไรค้าง ส่วนการลบ Bun ออกจากเครื่อง ตามหน้า Installation หัวข้อ Uninstall
| เครื่อง | ทำยังไง |
|---|---|
| Windows | PowerShell: powershell -c ~\.bun\uninstall.ps1 ถ้าลงผ่าน npm ใช้ npm uninstall -g bun |
| macOS / Linux | rm -rf ~/.bun แล้วลบบรรทัดที่ตัวติดตั้งเพิ่มไว้ในไฟล์ตั้งค่า shell เช่น ~/.zshrc |
สรุป
- Bun คือตัวรัน JavaScript และ TypeScript ที่รวม package manager ตัวรันเทสต์ และเว็บเซิร์ฟเวอร์ไว้ในโปรแกรมเดียว
- ติดตั้งด้วยคำสั่งเดียว แล้วเปิดหน้าต่างคำสั่งใหม่หนึ่งครั้ง
bun add,bun testและBun.serveใช้แทน npm, Jest และ Express ได้ในงานพื้นฐาน- Bun เร็วกว่า npm จริง แต่ตัวเลข 30 เท่ามาจากการทดสอบบน Linux เครื่องเราอาจได้น้อยกว่านั้นมาก ควรวัดเอง
- แพ็กเกจส่วนใหญ่ใช้ได้ แต่ไม่ใช่ทุกตัว ลองกับโปรเจกต์ส่วนตัวก่อนย้ายงานจริง
| อยากทำ | พิมพ์ |
|---|---|
| เช็กเวอร์ชัน | bun --version |
| อัปเดต Bun | bun upgrade |
| สร้างโปรเจกต์ | bun init -y |
| รันไฟล์ | bun run index.ts |
| รันแบบรีสตาร์ตเอง | bun --watch server.ts |
| ลงแพ็กเกจทั้งหมด | bun install |
| เพิ่ม / ลบแพ็กเกจ | bun add ชื่อ / bun remove ชื่อ |
| รันเทสต์ | bun test |
อ่านต่อจากเอกสารทางการ
พร้อมแล้วก็ไปทำ Quiz ท้ายบทด้านล่างเพื่อรับ XP ได้เลยครับ