Tốc Độ Cài Đặt: NPM vs Bun
Lời Kết
Có bao giờ bạn “phát bực” vì chờ đợi npm install
chạy mòn mỏi, lock file thì khó đọc, mỗi lần merge code là loạn xạ conflict? Giờ là lúc Bun.js xuất hiện như giải pháp “tất cả trong một” cho developer: từ runtime, package manager, test runner cho tới bundler, nay đã tung ra phiên bản 1.2 với vô số nâng cấp cực “xịn”, hứa hẹn đánh bật Node.js + NPM khỏi tim bạn!
Trước khi đến với các tính năng mới trong bun. Đây là hướng dẫn cài đặt:
npm i -g bun
Dưới đây là loạt tính năng “căng đét” trong Bun.js 1.2:
dgram
, http2
, server
, cluster
…node
thành bun
mà không cần sửa quá nhiều code.// main.ts
import express from 'express';
import { config } from 'dotenv';
config();
const port = process.env.PORT || 3001;
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res.send('Hello from Bun + Express!');
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
Sau đó bạn có thể chạy file main.ts
này với:
bun server.ts
import { s3, serve } from 'bun';
const file = s3.file('folder/my-file.txt');
// file này hành xử như Blob, có thể đọc text(), arrayBuffer() hoặc trả về response
// Up file sang server khác qua fetch()
const response = await fetch('https://example.com/upload', {
method: 'POST',
body: file,
});
// Hoặc tự serve file qua HTTP
serve({
port: 8080,
fetch(req) {
return new Response(file, {
headers: { 'Content-Type': 'text/plain' },
});
},
});
import sql from 'bun:sql';
await sql`
CREATE TABLE IF NOT EXISTS messages (
id SERIAL PRIMARY KEY,
content TEXT NOT NULL
);
`;
await sql`
INSERT INTO messages (content)
VALUES ('Xin chào Bun 1.2!')
`;
const rows = await sql`SELECT * FROM messages;`;
console.log(rows);
npm install
.# Tạo package.json nếu chưa có
bun init
# Cài package
bun install react react-dom
# Tự sinh file bun.lock chứa thông tin dependencies dạng JSONC
import page from './index.html';
// page lúc này đã được Bun xử lý, sẵn sàng cho SSR hoặc trả về client
serve({
port: 3000,
async fetch(req) {
// Có thể render string HTML, hoặc combine với template engine
return new Response(page, {
headers: { 'Content-Type': 'text/html' },
});
},
});
Công cụ | Thời Gian Cài 100 Gói |
---|---|
NPM | ~ 40s – 1’ phút |
Bun | ~ 10s – 15s |
(Bảng trên chỉ là minh hoạ mang tính chất “đong vui”. Tốc độ thực tế còn tuỳ máy!)
Bun.js 1.2 đem lại cảm giác “ơn giời” cho những ai phát “chán” với Node.js + NPM lề mề: từ runtime “trâu bò” tương thích Node, cài package “thần tốc”, lock file dễ quản lý, cho tới S3 & SQL client tích hợp, xử lý bundling front-end nhẹ nhàng như lông hồng.
Nếu muốn:
Thì bạn nhất định phải thử Bun.js ngay! Hãy nói lời chia tay “npm install” dài dằng dặc, nâng tầm dự án của bạn với Bun.js 1.2 – “Dùng Bun.js đi, đừng dùng NPM nữa!”