Deno 2.2: OpenTelemetry Built-in, Lint Plugins và node:sqlite — Những Thứ Frontend Dev Cần Biết
Deno 2.2 mang đến OpenTelemetry tích hợp sẵn, plugin API cho linter, và module node:sqlite — cùng mình điểm qua những tính năng thực sự hữu ích cho dự án frontend/fullstack.
Deno 2.2 vừa ra và đây là những điểm đáng chú ý
Deno 2.2 vừa được release với một loạt cải tiến đáng chú ý. Với các bạn đang dùng Deno cho backend API, tooling, hay thậm chí là script automation — có mấy thứ trong bản này thực sự đáng để upgrade ngay.
1. OpenTelemetry Built-in — Observability không cần cài thêm gì
Đây có lẽ là tính năng lớn nhất của 2.2. Trước đây muốn có tracing/metrics cho Deno app thì phải cài thêm package, configure manual. Giờ Deno có OpenTelemetry tích hợp sẵn — bật lên bằng flag là chạy:
# Bật OpenTelemetry với OTLP exporter
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 \
OTEL_SERVICE_NAME=my-deno-api \
deno run --unstable-otel main.ts
Deno tự động tạo spans cho các operations như fetch, Deno.serve, và một số built-in khác. Bạn cũng có thể tạo custom spans:
import { trace } from "npm:@opentelemetry/api";
const tracer = trace.getTracer("my-service");
async function processOrder(orderId: string) {
return await tracer.startActiveSpan("process-order", async (span) => {
span.setAttribute("order.id", orderId);
try {
const result = await fetchOrderData(orderId);
span.setStatus({ code: 1 }); // OK
return result;
} catch (err) {
span.recordException(err as Error);
span.setStatus({ code: 2, message: (err as Error).message }); // ERROR
throw err;
} finally {
span.end();
}
});
}
Điểm hay là nó hoạt động với Grafana Tempo, Jaeger, hay bất kỳ backend nào hỗ trợ OTLP. Không cần vendor lock-in.
2. Lint Plugin API — Viết custom linting rule bằng TypeScript
Deno 2.2 giới thiệu plugin API cho deno lint. Bạn có thể viết custom lint rules bằng TypeScript và tích hợp vào project. Ví dụ một rule đơn giản cấm dùng console.log trong production code:
// lint-plugins/no-console-log.ts
export default {
name: "no-console-log",
rules: {
"no-console-log": {
create(context) {
return {
CallExpression(node) {
if (
node.callee.type === "MemberExpression" &&
node.callee.object.type === "Identifier" &&
node.callee.object.name === "console" &&
node.callee.property.type === "Identifier" &&
node.callee.property.name === "log"
) {
context.report({
node,
message: "Dùng logger thay vì console.log trong production code",
});
}
},
};
},
},
},
};
Cấu hình trong deno.json:
{
"lint": {
"plugins": ["./lint-plugins/no-console-log.ts"],
"rules": {
"include": ["no-console-log"]
}
}
}
Với các team lớn, tính năng này cực kỳ hữu ích để enforce coding standards nội bộ mà không cần phụ thuộc vào ESLint ecosystem.
3. node:sqlite — SQLite không cần package ngoài
Deno 2.2 thêm node:sqlite module, cho phép dùng SQLite trực tiếp mà không cần cài better-sqlite3 hay wrapper nào khác:
import { DatabaseSync } from "node:sqlite";
const db = new DatabaseSync(":memory:"); // hoặc path đến file .db
// Tạo bảng
db.exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
`);
// Insert
const insert = db.prepare(
"INSERT INTO users (name, email) VALUES (?, ?)"
);
insert.run("Nguyễn Văn A", "a@example.com");
// Query
const users = db.prepare("SELECT * FROM users").all();
console.log(users);
Đây là API synchronous (blocking) — phù hợp cho scripts, CLI tools, hay testing. Không nên dùng trong hot path của server vì sẽ block event loop.
Cải tiến khác đáng chú ý
- deno check cải thiện đáng kể — type checking nhanh hơn, ít false positive hơn với npm packages
- deno lsp — language server ổn định hơn, autocomplete tốt hơn trong VS Code
- deno task — hỗ trợ thêm các shell built-ins, gần hơn với bash behavior
Có nên upgrade ngay không?
Nếu bạn đang dùng Deno cho production, có — đặc biệt nếu team cần observability. OpenTelemetry built-in là game changer cho debugging distributed systems.
Nếu bạn chưa thử Deno, đây là thời điểm tốt để bắt đầu — nhất là với các project mới cần tooling hiện đại mà không muốn quản lý quá nhiều config. Cài bằng một lệnh:
curl -fsSL https://deno.land/install.sh | sh
Mình đang dùng Deno cho gì? Chủ yếu là API scripts, webhook handlers, và automation tools. Node.js vẫn là default cho fullstack app vì ecosystem, nhưng Deno ngày càng compelling hơn cho greenfield projects.
Admin
Cal.com
Open source scheduling — self-host your booking system, replace Calendly. Free & privacy-first.
Comments (0)
Sign in to comment
No comments yet. Be the first to comment!