Bun JavaScript Runtime: Bộ công cụ JS tất cả trong một
Bun JavaScript runtime là một bộ công cụ tất cả trong một cho JavaScript và TypeScript, đóng gói thành một file thực thi duy nhất và kiêm luôn vai trò bundler, test runner và trình quản lý gói tương thích npm. Viết bằng Rust (theo README) và dựng trên engine JavaScriptCore, nó hướng tới việc thay thế trực tiếp Node.js với khởi động nhanh hơn và tốn ít bộ nhớ hơn.
Hãy chọn Bun nếu bạn muốn một binary nhanh thay cho node, npm, jest và bundler của bạn, và các phụ thuộc của bạn đã chạy được trên nó — bước nhảy tốc độ khi cài đặt và chạy test là có thật. Hãy khoan nếu ứng dụng của bạn dựa nhiều vào các thành phần nội bộ sâu của Node.js hoặc native module mà JavaScriptCore và lớp tương thích của Bun chưa phủ hết; hãy kiểm thử đúng khối lượng công việc thực tế trước khi chuyển một dịch vụ production.
Vấn đề nó giải quyết
Một dự án JavaScript điển hình chắp vá nhiều công cụ riêng lẻ: Node.js để chạy code, npm hoặc yarn để cài gói, một bundler như Webpack hoặc esbuild, và Jest hoặc Vitest cho test. Mỗi cái có config, chi phí khởi động và những khác biệt phiên bản riêng. Điểm bán của Bun là gộp cả chồng đó vào một file thực thi, để bạn thôi phải dán bốn công cụ lại với nhau và thôi phải chờ cài đặt chậm cùng khởi động nguội.
Đây là gì?
Bun JavaScript runtime là một file thực thi duy nhất, `bun`, chạy trực tiếp JavaScript và TypeScript — gồm cả file .ts và .jsx mà không cần bước build riêng. Bên dưới runtime là ba công cụ nữa: một test runner (`bun test`), một trình chạy script, và một trình quản lý gói tương thích Node.js (`bun install`). README mô tả nó được viết bằng Rust và chạy trên JavaScriptCore, engine đứng sau Safari, thứ mà nó ghi công cho thời gian khởi động và mức dùng bộ nhớ thấp hơn Node.
Vì sao đang được chú ý
Với khoảng 94k sao GitHub, Bun JavaScript runtime là một trong những dự án được theo dõi nhiều nhất trong hệ sinh thái JavaScript. Sức hút là sự hợp nhất cộng với tốc độ: README quảng bá các công cụ tích hợp của nó nhanh hơn đáng kể so với các lựa chọn hiện có mà vẫn dùng được trong các dự án Node.js sẵn có với ít thay đổi. Công việc gần đây đã vượt xa runtime — một bundler (`Bun.build`), các client SQLite, Postgres, Redis và S3 tích hợp sẵn, cùng một shell — biến nó từ một runtime nhanh thành một thư viện chuẩn rộng.
Tính năng chính
- ✓Một binary `bun` duy nhất chạy trực tiếp TypeScript và JSX, không cần bước transpile riêng
- ✓Trình quản lý gói tương thích Node.js (`bun install`) mà README quảng bá là nhanh hơn nhiều so với npm hoặc yarn
- ✓Test runner tích hợp (`bun test`) với mock, snapshot và đo độ phủ code
- ✓Một bundler (`Bun.build`) với loader, plugin và xuất file thực thi đơn
- ✓API gốc cho SQLite, PostgreSQL, Redis và S3, cùng một HTTP server (`Bun.serve`) và WebSocket
- ✓`bunx` để chạy một gói mà không cần cài toàn cục, giống npx
- ✓Bản build đa nền tảng cho Linux, macOS và Windows trên x64 và arm64
Trường hợp dùng tốt nhất
- •Chạy một ứng dụng TypeScript hoặc JSX trực tiếp mà không cần chuỗi công cụ build riêng
- •Thay npm hoặc yarn bằng `bun install` để cắt thời gian cài phụ thuộc trong CI
- •Dùng `bun test` như một runner kiểu Jest mà không phải thêm Jest và config của nó
- •Đóng gói một frontend hoặc build một file thực thi đơn bằng `Bun.build`
- •Viết một HTTP hoặc WebSocket server nhỏ trên API `Bun.serve` tích hợp sẵn
Cách cài đặt / dùng thử
Cài bằng script chính thức: `curl -fsSL https://bun.com/install | bash` trên macOS hoặc Linux, hoặc `powershell -c "irm bun.sh/install.ps1 | iex"` trên Windows. Nó cũng có trên npm (`npm install -g bun`), Homebrew (`brew tap oven-sh/bun` rồi `brew install bun`), và Docker (`docker pull oven/bun`). Trên Linux, khuyến nghị kernel 5.6+ (tối thiểu 5.1). Cập nhật tại chỗ bằng `bun upgrade`.
Cách sử dụng
Chạy một file trực tiếp: `bun run index.tsx` xử lý TypeScript và JSX ngay từ đầu. Các lệnh thường ngày khác phản chiếu những công cụ mà Bun thay thế — `bun test` chạy test, `bun run start` chạy script `start` trong package.json, `bun install <pkg>` thêm một phụ thuộc, và `bunx cowsay 'Hello, world!'` chạy một gói mà không cài toàn cục. Tài liệu đầy đủ ở bun.com/docs.
Điểm mạnh
- ✓Một binary thay cho runtime, trình quản lý gói, test runner và bundler, nên có ít công cụ phải cấu hình hơn nhiều
- ✓Tốc độ khởi động và cài đặt là điểm nhấn — README ghi công cho JavaScriptCore và một trình cài nhanh hơn
- ✓TypeScript và JSX chạy không cần bước build, rút ngắn vòng lặp sửa-chạy
- ✓Đi kèm một thư viện chuẩn thực sự: SQLite, Postgres, Redis, S3, một HTTP server và một shell đều tích hợp sẵn
- ✓Đa nền tảng, gồm cả Windows trên x64 và arm64
Hạn chế & rủi ro
- △Tương thích Node.js chưa trọn vẹn — các ứng dụng dựa vào thành phần nội bộ sâu của Node hoặc một số native module có thể gặp lỗ hổng, nên hãy kiểm thử đúng khối lượng công việc thực tế trước khi chuyển
- △Nó chạy trên JavaScriptCore chứ không phải V8, nên hành vi và hiệu năng có thể khác Node và Chrome ở các trường hợp biên, và công cụ chuyên cho V8 sẽ không áp dụng được
- △Hỗ trợ Windows đến sau Linux và macOS và có ít trải nghiệm thực tế hơn; hãy xem nó như mục tiêu mới hơn
- △Metadata cung cấp ở đây không ghi giấy phép, nên hãy xác nhận điều khoản cấp phép trên repo trước khi phụ thuộc vào nó
- △Đi nhanh đồng nghĩa với một bề mặt API rộng và còn đang trưởng thành; một số API tích hợp là riêng của Bun và sẽ không chuyển ngược về Node được
Lựa chọn thay thế
Ai nên thử — và ai nên bỏ qua
Các đội bắt đầu một dịch vụ TypeScript mới, hoặc những đội bực bội vì cài đặt CI chậm và một chồng công cụ JavaScript bốn thứ, được lợi nhiều nhất từ Bun JavaScript runtime — nhất là khi các phụ thuộc của họ đã chạy được trên nó. Nếu bạn duy trì một ứng dụng production lớn gắn với các thành phần nội bộ cụ thể của Node.js, native addon hoặc hành vi V8, hãy giữ Node làm mặc định và thử Bun trên một dịch vụ không trọng yếu trước.
Câu hỏi thường gặp
Bun là một JavaScript runtime nhanh, tất cả trong một, đồng thời hoạt động như một bundler, test runner và trình quản lý gói tương thích Node.js, đóng gói thành một file thực thi duy nhất. Nó chạy trực tiếp JavaScript và TypeScript và hướng tới việc thay thế trực tiếp Node.js.
Đó là mục tiêu. README gọi Bun là bản thay thế trực tiếp cho Node.js và nói các công cụ của nó hoạt động trong các dự án Node sẵn có với ít thay đổi. Trên thực tế, độ tương thích cao nhưng chưa hoàn toàn, nên hãy kiểm thử trước các ứng dụng dựa vào thành phần nội bộ sâu của Node hoặc native module.
README quy thời gian khởi động và mức dùng bộ nhớ thấp hơn cho engine JavaScriptCore và một trình cài nhanh hơn, và quảng bá các công cụ tích hợp nhanh hơn đáng kể so với npm, yarn và Jest. Mức lợi thực tế tùy khối lượng công việc, nên hãy tự đo trên trường hợp của bạn.
README mô tả Bun được viết bằng Rust và chạy trên JavaScriptCore, cùng engine mà Safari dùng. Các topic được liệt kê của repo cũng gồm rust và javascriptcore.
Có. README liệt kê hỗ trợ Windows trên x64 và arm64, bên cạnh Linux và macOS. Hỗ trợ Windows đến sau các nền tảng khác, nên nó có ít trải nghiệm thực tế hơn.