หน้าแรก / บทความ / เครื่องมือ

Bun คืออะไร? ติดตั้งและเริ่มใช้ Bun แทน Node.js กับ npm พร้อมวัดความเร็วเอง

Bun คือตัวรัน JavaScript และ TypeScript ที่รวม package manager ตัวรันเทสต์ และเว็บเซิร์ฟเวอร์ไว้ในตัวเดียว สอนติดตั้งบน Windows และ macOS สร้างโปรเจกต์แรก และวัดความเร็วเทียบ npm เอง

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.jsbun run index.ts
ลงแพ็กเกจทั้งหมดnpm installbun install
เพิ่มแพ็กเกจnpm install zodbun add zod
รันเทสต์ต้องลง Jest หรือ Vitest เพิ่มbun test มีในตัว
รัน TypeScriptต้องแปลงก่อน หรือลงเครื่องมือเพิ่มรันไฟล์ .ts ได้ตรงๆ
ก่อนใช้ Bun ต้องลง Node.js, npm, ตัวรันเทสต์ และตัวแปลง TypeScript แยกกัน หลังใช้ Bun มีโปรแกรมเดียวทำได้ครบ
Bun = ตัวรันโค้ด + package manager + ตัวรันเทสต์ ในโปรแกรมเดียว

ใช้แทน Node ได้ทุกโปรเจกต์ไหม Bun เข้ากันได้กับแพ็กเกจ npm ส่วนใหญ่ แต่ไม่ใช่ทุกตัว ถ้าโปรเจกต์ของทีมใช้ Node.js อยู่แล้ว ให้ลองกับโปรเจกต์ส่วนตัวก่อน แล้วค่อยย้ายเมื่อมั่นใจว่าทุกอย่างรันได้

Bun เร็วกว่า npm จริงไหม

หน้าแรกของ bun.com เขียนว่าลงแพ็กเกจเร็วกว่า npm "สูงสุด 30 เท่า" ตัวเลขนี้มาจากการทดสอบของทีม Bun เอง บนเงื่อนไขเฉพาะ

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

สรุปคือ 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
powershell -c "irm bun.sh/install.ps1|iex"

macOS และ Linux เปิด Terminal แล้ววางคำสั่งนี้

Terminal
curl -fsSL https://bun.com/install | bash

ติดตั้งเสร็จแล้ว ปิดหน้าต่างคำสั่งแล้วเปิดใหม่หนึ่งครั้ง เครื่องถึงจะรู้จักคำสั่ง bun ถ้ามี Node.js อยู่แล้ว จะติดตั้งผ่าน npm ก็ได้ด้วย npm install -g bun

เช็กว่าติดตั้งสำเร็จ

PowerShell / Terminal
bun --version
ผลลัพธ์ประมาณนี้
1.4.4

ขึ้นเลขเวอร์ชันแปลว่าใช้ได้แล้ว เลขของคุณอาจใหม่กว่านี้ ถ้าอยากอัปเดตเป็นรุ่นล่าสุดในภายหลัง ใช้ bun upgrade

สร้างโปรเจกต์แรกด้วย bun init

สร้างโฟลเดอร์ฝึก แล้วให้ Bun สร้างโปรเจกต์ให้

PowerShell / Terminal
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 ลองรันไฟล์แรก

PowerShell / Terminal
bun run index.ts
ผลลัพธ์ที่ควรเห็น
Hello via Bun!

ขึ้นข้อความนี้แปลว่า Bun รันไฟล์ TypeScript ได้ตรงๆ โดยไม่ต้องแปลงก่อน ลองเปิด index.ts แก้ข้อความเป็นชื่อตัวเอง แล้วรันอีกรอบ

ลงแพ็กเกจด้วย bun add

ลองเพิ่มแพ็กเกจ zod (ไลบรารีตรวจรูปแบบข้อมูลที่นิยม) เป็นตัวอย่าง

PowerShell / Terminal
bun add zod
ผลลัพธ์ประมาณนี้
installed zod@4.6.7
 
1 package installed [1.77s]

เปิด package.json จะเห็นบรรทัด "zod": "^4.6.7" ในส่วน dependencies (เลขเวอร์ชันของคุณอาจต่าง) คำสั่งที่ใช้บ่อยเทียบกับ npm เป็นแบบนี้

อยากทำคำสั่ง Bunเทียบ npm
ลงทุกตัวตาม package.jsonbun installnpm install
เพิ่มแพ็กเกจbun add ชื่อnpm install ชื่อ
เพิ่มแบบใช้ตอนพัฒนาbun add -d ชื่อnpm install -D ชื่อ
ลบแพ็กเกจbun remove ชื่อnpm uninstall ชื่อ
รันสคริปต์ใน package.jsonbun run ชื่อสคริปต์npm run ชื่อสคริปต์

ทำไมต้องมี lockfile เพราะเมื่อเพื่อนโหลดโปรเจกต์ไปแล้วพิมพ์ bun install จะได้แพ็กเกจเวอร์ชันเดียวกับเราเป๊ะ ไม่มีปัญหา "เครื่องผมรันได้ แต่เครื่องเพื่อนรันไม่ได้"

เขียนเทสต์ด้วย bun test

เทสต์คือโค้ดที่เช็กว่าโค้ดของเราทำงานถูก แก้โค้ดทีหลังแล้วรันเทสต์ทีเดียว ก็รู้ทันทีว่ามีอะไรพังไหม สร้างไฟล์ฟังก์ชันง่ายๆ ก่อน

math.ts
export const add = (a: number, b: number) => a + b;

แล้วสร้างไฟล์เทสต์

math.test.ts
import { test, expect } from "bun:test";
import { add } from "./math";
 
test("1 + 2 = 3", () => {
  expect(add(1, 2)).toBe(3);
});
PowerShell / Terminal
bun test
ผลลัพธ์ที่ควรเห็น
math.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 หรือแพ็กเกจอื่นเพิ่ม

server.ts
const server = Bun.serve({
  port: 3000,
  fetch(req) {
    return new Response("สวัสดีจาก Bun!");
  },
});
 
console.log(`เปิดแล้วที่ ${server.url}`);
PowerShell / Terminal
bun run server.ts
ผลลัพธ์ที่ควรเห็น
เปิดแล้วที่ http://localhost:3000/

เปิดเบราว์เซอร์ไปที่ http://localhost:3000 หรือเปิดหน้าต่างคำสั่งอีกอันแล้วยิงด้วย curl (บน Windows PowerShell พิมพ์ curl.exe ส่วน macOS พิมพ์ curl)

หน้าต่างที่ 2
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 ก่อนวัดทุกรอบ

Windows PowerShell
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 TotalSeconds
macOS / Linux Terminal
rm -rf node_modules && time npm ci
rm -rf node_modules && time bun install

ผลที่วัดได้ในคลิป (Windows 11, i7-13650HX, 8 dependencies รวม 97 แพ็กเกจ มี lockfile และ cache แล้ว)

รอบnpm cibun install
รอบ 12.87 วินาที1.83 วินาที
รอบ 22.87 วินาที1.82 วินาที
รอบ 32.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 test0 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

เครื่องทำยังไง
WindowsPowerShell: powershell -c ~\.bun\uninstall.ps1 ถ้าลงผ่าน npm ใช้ npm uninstall -g bun
macOS / Linuxrm -rf ~/.bun แล้วลบบรรทัดที่ตัวติดตั้งเพิ่มไว้ในไฟล์ตั้งค่า shell เช่น ~/.zshrc

สรุป

  • Bun คือตัวรัน JavaScript และ TypeScript ที่รวม package manager ตัวรันเทสต์ และเว็บเซิร์ฟเวอร์ไว้ในโปรแกรมเดียว
  • ติดตั้งด้วยคำสั่งเดียว แล้วเปิดหน้าต่างคำสั่งใหม่หนึ่งครั้ง
  • bun add, bun test และ Bun.serve ใช้แทน npm, Jest และ Express ได้ในงานพื้นฐาน
  • Bun เร็วกว่า npm จริง แต่ตัวเลข 30 เท่ามาจากการทดสอบบน Linux เครื่องเราอาจได้น้อยกว่านั้นมาก ควรวัดเอง
  • แพ็กเกจส่วนใหญ่ใช้ได้ แต่ไม่ใช่ทุกตัว ลองกับโปรเจกต์ส่วนตัวก่อนย้ายงานจริง
อยากทำพิมพ์
เช็กเวอร์ชันbun --version
อัปเดต Bunbun upgrade
สร้างโปรเจกต์bun init -y
รันไฟล์bun run index.ts
รันแบบรีสตาร์ตเองbun --watch server.ts
ลงแพ็กเกจทั้งหมดbun install
เพิ่ม / ลบแพ็กเกจbun add ชื่อ / bun remove ชื่อ
รันเทสต์bun test

อ่านต่อจากเอกสารทางการ

พร้อมแล้วก็ไปทำ Quiz ท้ายบทด้านล่างเพื่อรับ XP ได้เลยครับ

Quiz ท้ายบท

5 ข้อ · ข้อละ 10 XP

ทดสอบความเข้าใจเรื่อง Bun ตอบถูกข้อละ 10 XP

  • 5 ข้อ
  • ไม่จับเวลา
  • เฉลยทันทีทุกข้อ