Nub - ชุดเครื่องมือแบบออลอินวันที่คล้าย Bun สำหรับ Node.js
(github.com/nubjs)- ชุดเครื่องมือแบบออลอินวันที่เสริมความสามารถโดยไม่แทนที่ Node.js เขียนด้วย Rust และมอบประสบการณ์พัฒนาแบบคล้าย Bun บน
nodeมาตรฐาน - รวมการรันไฟล์·สคริปต์ การติดตั้ง dependencies และการจัดการเวอร์ชัน Node ไว้ในเครื่องมือเดียว โดยไม่มีรันไทม์ใหม่, API เฉพาะผู้ขาย หรือ lock-in
- File runner
nub <file>— รัน.ts,.tsxเป็นต้นได้โดยไม่ต้องมีขั้นตอน build, เข้ากันได้กับnodeแบบ flag-for-flag และ var-for-var, startup เร็วกว่าtsx2.9×- รองรับ TypeScript เต็มรูปแบบ (
enum,namespace), JSX/TSX, Decorators, โหลด.env*อัตโนมัติ, และมี loader ในตัวสำหรับ.yaml,.toml,.json5เป็นต้น - ตรวจจับและติดตั้งเวอร์ชัน Node ที่โปรเจ็กต์ต้องการโดยอัตโนมัติ (อ้างอิง
.node-version,.nvmrc,package.json#enginesเป็นต้น)
- รองรับ TypeScript เต็มรูปแบบ (
- Script runner
nub run— ใช้แทนnpm/pnpm runได้แบบ drop-in, เป็นไบนารี Rust ที่ไม่มี JS startup ของตัวเอง ทำให้ dispatch เร็วกว่าpnpm runราว 24× (14.7ms vs 442.7ms)- รองรับครบทั้ง
pre/posthook,--filter·--parallelของ pnpm workspace เป็นต้น
- รองรับครบทั้ง
- Package runner
nubx— ใช้แทนnpx·pnpm dlxได้แบบ drop-in, ตัดภาระจากการ spawn Node สองรอบ ทำให้รันได้เร็วกว่าnpxราว 19× (11ms vs 226ms) - Package manager
nub install— ใช้เอนจิน Aube, เข้ากันได้กับ flag ของpnpm, เร็วกว่าpnpm2.5× และเร็วกว่าnpm3.7×- มีนโยบายความปลอดภัยเริ่มต้นในตัว — บล็อก postinstall, ตรวจแพ็กเกจอันตรายผ่าน osv.dev, ปฏิเสธ provenance downgrade, และตั้ง
minimumReleaseAgeไว้ 24 ชั่วโมง - ทำงานในโหมด compat-mode ที่ตรวจจับ lockfile และการตั้งค่าของ npm/pnpm/Yarn/Bun โดยอัตโนมัติ
- มีนโยบายความปลอดภัยเริ่มต้นในตัว — บล็อก postinstall, ตรวจแพ็กเกจอันตรายผ่าน osv.dev, ปฏิเสธ provenance downgrade, และตั้ง
- Node version manager
nub node— มีคำสั่งจัดการแบบแมนนวล เช่น install·ls·uninstall·pin เวอร์ชัน - Package meta-manager
nub pm— ทำหน้าที่แบบ Corepack ด้วย native Rust และลงทะเบียน global shim สำหรับnpm·yarn·pnpm - สัญญาอนุญาต MIT
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ไอเดียดีมากและสมเหตุสมผล Bun มีอย่างพวก ไดรเวอร์ฐานข้อมูล เพิ่มมาให้ แต่ก็ชัดเจนว่าส่วนสำคัญของเสน่ห์มันคือประสบการณ์นักพัฒนา
อ้างอิงไว้ว่า ผู้เขียนหลักของ Nub คือ Colin McDonnell ผู้สร้าง Zod และเคยทำงานที่ Bun มาก่อนด้วย
nub:, ไม่มีไฟล์คอนฟิก/lock file ที่ใช้ชื่อ Nub, ไม่มีฟิลด์nubในpackage.json, และไม่มีตัวแปรสภาพแวดล้อมNUB_ผมคิดว่าสิ่งที่ Bun เพิ่มเข้ามาส่วนใหญ่ควรปล่อยให้เป็น dependency ปกติมากกว่า
น่าแปลกที่ใช้ hook ของ
--requireแทน--importอาจมีอะไรเปลี่ยนไปมากจากตอนที่ผมเคยดูเพื่อทำฟังก์ชันคล้ายกัน แต่สงสัยว่าการรองรับ ESM ของ Nub น่าจะมีรายละเอียดจุกจิกบางอย่างตอนนั้น
--importของ Node ยังอยู่ช่วงแรกมาก และมีข้อยกเว้นหลายอย่างที่อยากจัดการในแนวทาง ESM-to-CJS แบบที่พบบ่อย แม้ส่วนใหญ่คงเป็นเคสเฉพาะทางมาก แต่ผมคิดว่า top-level await น่าจะกระทบผู้ใช้บางส่วนที่สำคัญ--requireมี overhead ราว 0.5ms ส่วน--importอยู่ที่ประมาณ 4.6ms บน M1 Macbook Proในประเด็นนี้ Node.js เพิ่งเพิ่ม
module.registerHooks()เข้ามาในปี 2025 ซึ่งเป็น API แบบ synchronous สำหรับลงทะเบียน resolver hook เพื่อให้เร็วกว่า API เดิมแบบ asynchronousmodule.register()นี่ช่วยปลดล็อกอุปสรรคใหญ่ของ Nub ไปได้ สำหรับคนที่สนใจ ขอเสริมว่า API แบบ async มี fixed registration overhead 19ms และเพิ่ม overhead อีกราว 130us ต่อ importธงที่ Nub ใช้ตรงนี้ไม่ส่งผลกับโค้ดของผู้ใช้เลย และ top-level await ก็รองรับทุกที่ที่ Node.js รองรับอยู่แล้ว
เราเพิ่ง merge PR ที่ ย้ายทั้ง monorepo ไปใช้ nub
ไม่มีปัญหาเลยสักอย่าง และเร็วแบบเหลือเชื่อ
Node รัน TypeScript ได้มาตั้งแต่หลายเวอร์ชันก่อนแล้วไม่ใช่เหรอ? แล้วทำไมยังต้องมีตัวแปลงอีก?
tsconfigไปด้วยอันนี้ดูเหมือนจะรองรับทั้งแนวทางลบออกแบบในตัวและการประมวลผล TypeScript แบบจริงจัง
--experimental-transform-typesออกจาก Node.js v26 แล้ว แบบนี้ก็ทำให้ การรองรับ TypeScript แบบสมบูรณ์ในระดับเนทีฟ เป็นไปไม่ได้https://github.com/nodejs/typescript/issues/51#issuecomment-...
Worker,Temporalใน README เขียนว่ารองรับ WebSocket แบบเนทีฟตั้งแต่ Node 22 แต่ Node ไม่มีไลบรารี WebSocket แบบเนทีฟ ลิงก์มาตรฐาน WebSocket ก็พาไป MDN ซึ่งอธิบายแค่ส่วนติดต่อผู้ใช้แบบ WHATWG ไม่ได้อธิบายโปรโตคอลหรือวิธีทำงานของ WebSocket
เหมือนมีอะไรตกหล่นไป หรือไม่ก็รู้สึกเหมือนกำลังใช้ ไลบรารีที่ไม่เนทีฟ มาช่วย
น่านับถือที่ยอมรับเทคโนโลยีเดิมและไม่สร้างเวอร์ชันที่แย่กว่าขึ้นมาใหม่ ถ้าความพยายามทั้งหมดที่ลงไปกับการสร้างทางเลือกถูกเทไปที่ Node เอง ภายใต้ผู้นำที่เหมาะสม ผมก็สงสัยว่าตอนนี้มันจะไปได้ไกลแค่ไหนแล้ว
ทีมเล็กและคล่องตัวสามารถพิสูจน์ไอเดียดี ๆ ได้ เพราะความล้มเหลวไม่ใช่ความเสี่ยงร้ายแรง พูดสั้น ๆ คือ fork เป็นส่วนหนึ่งของระบบนิเวศที่ดีต่อสุขภาพ
ตัวอย่างง่าย ๆ คือ Node เป็นซอฟต์แวร์โอเพนซอร์สจริงจังเพียงตัวเดียวเท่าที่ผมรู้ ที่ ไม่มีทางเอกสารคอนฟิกไว้ในไฟล์คอนฟิกได้ มันเหลือเชื่อมาก ฝั่ง Node รับ JSON มาใช้แบบไม่คิดมาก แล้วหลังจากนั้นก็ปฏิเสธแม้แต่จะพิจารณาทางเลือกใด ๆ รวมถึง “JSON ที่มีคอมเมนต์”
เมื่อองค์กรยึดติดกับการตัดสินใจที่แย่ วิธีเดียวที่จะแก้คือเริ่มใหม่ ตราบใดที่ทุกคนยังคงสร้างต่อบน Node ระบบนิเวศ JS ทั้งหมดก็จะไม่สามารถทิ้งเอกสารกำกับไว้ในคอนฟิกได้
ระบบนิเวศ Node มีปัญหาแบบนี้อีกหลายอย่าง และความไร้เหตุผลเต็มขั้นที่เอกสารกำกับคอนฟิกไม่ได้ก็เป็นเพียงจุดที่ผมหงุดหงิดเป็นการส่วนตัว
เป็นแฟนของ Nub และมาสคอต nubnub พูดจริง ๆ ว่าเป็นโปรเจ็กต์ที่ยอดเยี่ยม และก็น่าสนใจมากจนผมลองใช้มาตลอดตั้งแต่สัปดาห์ก่อน หรืออย่างน้อยก็ตั้งแต่เปิดตัวสาธารณะ
ฉลาดดี อย่างน้อยถ้าเขียนด้วย Rust อยู่แล้ว ก็ไม่ต้องเสี่ยงย้ายไป Rust แบบ vibe coding แล้วเสียลูกค้าไปหมด ;)
เสริมอีกนิด กระแสต่อต้าน AI แบบฮิสทีเรียของ Bun น่าเศร้ามาก และบางครั้งก็ให้ความรู้สึกเหมือนเป็นแคมเปญที่จัดตั้งขึ้นมา
package.json