Nub - bộ công cụ all-in-one kiểu Bun cho Node.js
(github.com/nubjs)- Bộ công cụ all-in-one bổ trợ chứ không thay thế Node.js, được viết bằng Rust và mang lại trải nghiệm phát triển tương tự Bun trên
nodetiêu chuẩn - Hợp nhất một công cụ duy nhất để chạy tệp·lệnh script, cài đặt dependency và quản lý phiên bản Node, không có runtime mới, API phụ thuộc nhà cung cấp hay lock-in
- File runner
nub <file>— chạy.ts,.tsx... mà không cần bước build, tương thíchnodetừng flag một và từng biến một, khởi động nhanh hơntsx2,9×- Hỗ trợ TypeScript đầy đủ (
enum,namespace), JSX/TSX, Decorators, tự động nạp.env*, loader tích hợp cho.yaml,.toml,.json5... - Tự động phát hiện và cài đặt phiên bản Node mà dự án yêu cầu (tham chiếu
.node-version,.nvmrc,package.json#engines...)
- Hỗ trợ TypeScript đầy đủ (
- Script runner
nub run— thay thế trực tiếp chonpm/pnpm run, là binary Rust không có JS startup riêng nên dispatch nhanh hơn khoảng 24× so vớipnpm run(14.7ms vs 442.7ms)- Hỗ trợ đầy đủ
pre/posthook, pnpm workspace--filter,--parallel...
- Hỗ trợ đầy đủ
- Package runner
nubx— thay thế trực tiếp chonpxvàpnpm dlx, loại bỏ chi phí double-Node-spawn nên chạy nhanh hơnnpxkhoảng 19× (11ms vs 226ms) - Package manager
nub install— dựa trên engine Aube, tương thích flag vớipnpm, nhanh hơnpnpm2,5× và nhanh hơnnpm3,7×- Tích hợp chính sách bảo mật mặc định — chặn postinstall, kiểm tra gói độc hại qua osv.dev, từ chối provenance downgrade,
minimumReleaseAge24 giờ - Chạy ở compat-mode để tự động phát hiện lockfile và cấu hình của npm/pnpm/Yarn/Bun
- Tích hợp chính sách bảo mật mặc định — chặn postinstall, kiểm tra gói độc hại qua osv.dev, từ chối provenance downgrade,
- Node version manager
nub node— cung cấp các lệnh quản lý thủ công như install, ls, uninstall, pin phiên bản - Package meta-manager
nub pm— đảm nhiệm vai trò của Corepack bằng Rust native, đăng ký global shim chonpm,yarn,pnpm - Giấy phép MIT
1 bình luận
Ý kiến trên Hacker News
Ý tưởng này rất hay và hợp lý. Bun có cung cấp thêm những thứ như driver DB, nhưng rõ ràng trải nghiệm lập trình viên cũng là một phần rất lớn trong sức hút của nó
Nhân tiện, tác giả chính của Nub là Colin McDonnell, người tạo ra Zod, và từng làm việc tại Bun
nub:, không có file cấu hình/file khóa nào mang tên Nub, không có trườngnubtrongpackage.json, cũng không có biến môi trườngNUB_Tôi nghĩ phần lớn những gì Bun thêm vào sẽ tốt hơn nếu được để thành dependency đúng nghĩa
Hơi bất ngờ khi họ dùng hook
--requirethay vì--import. Có thể mọi thứ đã thay đổi nhiều kể từ lúc tôi xem xét để làm tính năng tương tự, nhưng tôi vẫn nghi Nub có vài điểm tinh tế trong hỗ trợ ESMKhi đó
--importcủa Node còn rất sơ khai, và có khá nhiều trường hợp ngoại lệ mà cách tiếp cận ESM-to-CJS phổ biến muốn xử lý. Có lẽ phần lớn là trường hợp rất ngách, nhưng tôi nghĩ top-level await sẽ ảnh hưởng đến một số người dùng đáng kể--requirecó overhead khoảng 0.5ms, còn--importlà khoảng 4.6ms trên M1 Macbook ProLiên quan đến chuyện này, Node.js gần đây trong năm 2025 đã giới thiệu
module.registerHooks(), một phiên bản đồng bộ của API đăng ký hook resolver, để cải thiện hiệu năng so với APImodule.register()bất đồng bộ cũ. Đây là một trở ngại lớn được gỡ bỏ với Nub. Nói thêm cho ai quan tâm: API bất đồng bộ thêm overhead đăng ký cố định 19ms cùng khoảng 130us overhead bổ sung cho mỗi lần importViệc Nub dùng cờ nào ở đây hoàn toàn không ảnh hưởng đến mã của người dùng, và top-level await vẫn được hỗ trợ ở những nơi Node.js tự hỗ trợ
Tôi vừa merge một PR để migrate toàn bộ monorepo của chúng tôi sang nub
Không gặp vấn đề nào, và nhanh đến mức vô lý
Chẳng phải Node đã chạy được TypeScript từ vài phiên bản trước rồi sao? Vậy cần bộ chuyển đổi làm gì?
tsconfigCó vẻ cái này hỗ trợ cả cách xóa tích hợp lẫn xử lý TypeScript thực thụ
--experimental-transform-typestrong Node.js v26. Điều này khiến hỗ trợ TypeScript đầy đủ ở mức native trở nên bất khả thihttps://github.com/nodejs/typescript/issues/51#issuecomment-...
Worker,Temporalthì sẽ tiêm polyfillREADME nói hỗ trợ WebSocket là native từ Node 22, nhưng Node không có thư viện WebSocket native. Liên kết chuẩn WebSocket lại dẫn sang MDN, mà bên đó chỉ giải thích giao diện WHATWG cho người dùng chứ không mô tả giao thức hay cách WebSocket hoạt động
Có vẻ như đang thiếu gì đó, hoặc là họ dùng một thư viện không native để hỗ trợ
Đáng tôn trọng ở chỗ nó chấp nhận công nghệ hiện có thay vì làm lại một phiên bản tệ hơn. Nếu toàn bộ nỗ lực đổ vào việc tạo lựa chọn thay thế được dồn cho Node, tôi tự hỏi dưới sự dẫn dắt phù hợp thì giờ nó đã tiến xa đến đâu
Các nhóm nhỏ và linh hoạt có thể chứng minh những ý tưởng hay vì thất bại không phải rủi ro chí mạng. Nói ngắn gọn, fork là một phần của hệ sinh thái lành mạnh
Ví dụ đơn giản nhất là Node là phần mềm mã nguồn mở nghiêm túc duy nhất mà tôi biết không có cách nào để ghi tài liệu cho cấu hình ngay trong file cấu hình. Thật vô lý. Phía Node đã hấp tấp chọn JSON, rồi sau đó từ chối xem xét bất kỳ lựa chọn thay thế nào, kể cả “JSON có chú thích”
Khi một tổ chức bị kẹt cứng vào quyết định tồi, cách duy nhất để sửa là bắt đầu lại từ đầu. Chừng nào mọi người vẫn tiếp tục chồng thêm lên Node, toàn bộ hệ sinh thái JS sẽ không thể để lại tài liệu trong phần cấu hình
Hệ sinh thái Node có khá nhiều vấn đề như vậy, và sự phi lý tuyệt đối của việc không thể ghi tài liệu cho cấu hình chỉ là điểm khiến cá nhân tôi bực nhất
Tôi là fan của Nub và linh vật nubnub. Nói nghiêm túc thì đây là một dự án rất tốt, khá thú vị, và tôi đã dùng thử từ tuần trước, hoặc ít nhất là từ khi nó được công khai
Thông minh đấy. Vì nếu đã được viết bằng Rust rồi thì sẽ không có chuyện migrate sang Rust bằng vibe coding rồi làm mất sạch khách hàng ;)
Nói thêm thì cơn cuồng chống AI của Bun thật sự rất đáng buồn, đôi lúc còn có cảm giác như một chiến dịch có tổ chức
package.json