Từ Deno quay về Node: Khi runtime cũ bỗng trở nên 'ngon' đến không ngờ

05 tháng 10, 2026·4 phút đọc

Sau nhiều năm gắn bó với Deno, một lập trình viên quyết định quay lại Node.js và bất ngờ nhận ra Node đã thay đổi quá nhiều: hỗ trợ ECMAScript hiện đại, chạy TypeScript không cần cấu hình phức tạp, và tốc độ build nhanh hơn 15%. Bài viết phân tích lý do Deno đang dần mất đi sức hút trong khi Node ngày càng được cải thiện.

Từ Deno quay về Node: Khi runtime cũ bỗng trở nên 'ngon' đến không ngờ

Từ Deno quay về Node: Khi runtime cũ bỗng trở nên "ngon" đến không ngờ

Có một thời, Deno được xem là "kẻ kế nhiệm" sáng giá của Node.js với nhiều cải tiến vượt trội. Nhưng sau nhiều năm gắn bó, một lập trình viên đã quyết định quay lại với Node và phát hiện ra rằng Node giờ đây đã "lột xác" hoàn toàn. Bài viết dưới đây kể lại hành trình đó, cùng những lý do khiến Deno dần mất đi vị thế.

Node.js đã thay đổi như thế nào?

Tác giả bài viết gốc trên dbushell.com chia sẻ rằng sau nhiều năm chỉ dùng Deno, anh gần như quên cách dùng Node. Nhưng khi quay lại với Node v26.10.0 trong một dự án SvelteKit, anh bất ngờ nhận ra:

  • Cú pháp ECMAScript hiện đại đã được hỗ trợ đầy đủ
  • Các API cũ kỹ, khó chịu đã được thay thế hoặc hiện đại hóa
  • Không còn phải nhìn thấy require() — điều mà tác giả gọi là "không bao giờ phải thấy lại"
  • Node có thể chạy TypeScript trực tiếp mà không cần cấu hình phức tạp

"Khi nào Node trở nên tốt đến vậy?" — tác giả viết đầy ngạc nhiên.

Quản lý gói: PNPM lên ngôi

Một trong những lý do tác giả rời bỏ hệ sinh thái NPM truyền thống là vấn đề bảo mật. Anh chọn PNPM để tránh bị tấn công qua các gói độc hại, kèm theo hai alias tiện lợi:

alias npm=pnpm
alias npx=pnpx

PNPM cũng mặc định chặn các script post-install — vốn là lỗ hổng phổ biến để phát tán malware. Tác giả còn thêm cấu hình trong pnpm-workspace.yaml để trì hoãn việc cập nhật các gói mới:

minimumReleaseAge: 1440
trustPolicy: no-downgrade

Anh ban đầu định đặt thời gian chờ là "một tháng" (vì Microsoft cần ít nhất ngần ấy thời gian để gỡ malware bị báo cáo), nhưng cuối cùng chọn "một ngày" để cân bằng giữa bảo mật và tính khả dụng.

TypeScript: Điểm sáng và điểm tối

Node giờ chạy được TypeScript, nhưng có một hạn chế "triết lý" hơn là kỹ thuật: Node từ chối xử lý file TypeScript nằm trong thư mục node_modules.

"Stripping types is currently unsupported for files under node_modules" — thông báo lỗi từ Node.

Tác giả cho rằng quyết định này nhằm ngăn chặn sự bùng nổ của các gói TypeScript trên NPM, tránh "làm ô nhiễm" toàn bộ hệ sinh thái. Tuy nhiên, điều này cũng buộc anh phải dùng thêm công cụ như Tsdown để bundle code — kèm theo vài file cấu hình "đáng ghét".

Chuyển website từ Deno sang Node: Nhẹ nhàng đến bất ngờ

Bài kiểm tra cuối cùng của tác giả là chuyển static site generator từ Deno sang Node. Kết quả:

  • Chỉ cần thay API file system của Deno bằng node:fs
  • Thay Deno.serve bằng Hono trên nền node:http
  • Đổi @std/path của Deno sang node:path

Điều bất ngờ nhất: thời gian build nhanh hơn 15% dù codebase vẫn còn mang phong cách Deno. Tác giả tin rằng nếu tận dụng thêm các API gốc của Node, hiệu năng còn có thể tốt hơn nữa.

Vì sao Deno đang "xuống dốc"?

Tác giả không giấu giếm sự thất vọng với Deno Land Inc. Ông cho rằng công ty này đã đánh mất tinh thần đổi mới vốn có:

  • Một nửa nhân viên bị sa thải
  • Đội ngũ còn lại dường như tập trung vào "ảo tưởng AI" và các sản phẩm thiếu sức thuyết phục
  • Deno từ một runtime JavaScript hiện đại, sáng tạo đã trở thành một startup nhàm chán

Ba vấn đề cụ thể khiến tác giả quyết định rời bỏ:

  • Tích hợp ZSH bị hỏng suốt nhiều tuần
  • JSR liên tục trả về lỗi "429 (Too Many Requests)"
  • Các bug khiến Deno "nghẹn" khi xử lý nhiều request HTTP đồng thời

"Không còn lý do gì để dùng runtime Deno nữa. Node đã âm thầm bắt kịp, thậm chí vượt mặt Deno ở nhiều điểm."

Góc nhìn cho lập trình viên Việt Nam

Với cộng đồng lập trình viên Việt Nam, câu chuyện này mang lại vài bài học thực tế:

  • Không nên "cưới" một công nghệ quá sớm, dù nó có hứa hẹn đến đâu. Hệ sinh thái Node với hàng triệu gói và cộng đồng khổng lồ vẫn là lựa chọn an toàn cho hầu hết dự án.
  • Bảo mật chuỗi cung ứng phần mềm đang là vấn đề nóng. Việc dùng PNPM thay vì NPM, cùng cấu hình minimumReleaseAge, là những bước phòng ngừa đáng học hỏi.
  • Runtime mới như Deno hay Bun vẫn đáng để thử nghiệm, nhưng nên cân nhắc kỹ khi đưa vào dự án production có khách hàng.

Cuối cùng, tác giả kết thúc bằng một dòng lệnh ngắn gọn nhưng đầy ý nghĩa:

brew uninstall deno

Một chương khép lại, và Node — người bạn cũ tưởng đã bị bỏ rơi — bất ngờ trở thành "best friend" mới.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗