Nub؛ ابزار همهکارهٔ Node بدون جایگزینکردنش
خلاصهٔ کاملتر
به گفتهٔ این مقاله، Node استانداردِ طلاییِ جاوااسکریپت سمت سروره، ولی چون روی سازگاری و پایداری سختگیره، فیچرهای مربوط به تجربهٔ توسعهدهنده رو کند اضافه میکنه. برای همین یه عالمه ابزار جداگانه دورش جمع شده: node برای اجرا، npm run برای اسکریپتها، npx برای باینریها، tsx برای TypeScript، بهعلاوهٔ dotenv و nodemon.
نویسنده میگه Bun و Deno نشون دادن که تشنگیِ زیادی برای یه جعبهابزار همهکاره وجود داره، ولی هیچکدوم هنوز سلطهٔ Node تو پروداکشن رو نشکوندن و سازگاریشون با Node هم فاصلهٔ زیادی داره. ایرادِ مشترکشون اینه که میخوان جای Node رو بگیرن و از صفر رانتایم میسازن.
Nub برعکسه: یه باینری Rustه که کد رو با oxc در حافظه ترنسپایل میکنه و خروجی رو روی همون node استوکِ پروژه اجرا میکنه؛ عملاً رانتایمِ جدا برای Nub وجود نداره و همهچی از طریق نقاط توسعهٔ خودِ Node سوار میشه. رو مجموعهٔ سازگاریِ Deno، ۹۸٫۸٪ از چیزی که Node واقعی پاس میکنه رو پاس میکنه، در برابر ۷۷٫۴٪ برای Deno و ۴۰٫۵٪ برای Bun.
بهعنوان جایگزین drop-in برای node، فایلهای TypeScript، JSX و دکوراتورهای legacy (همون فرمی که NestJS و TypeORM و Angular بهش وابستهان) رو بدون بیلد اجرا میکنه، tsconfig.json#paths رو موقع اجرا اعمال میکنه، فایلهای .env و ایمپورت YAML/TOML رو میخونه، و APIهای مدرن مثل Temporal و WebSocket و Worker رو روی نسخههای قدیمیترِ Node پُلیفیل یا آنفلگ میکنه. نویسنده میگه سربارِ ترنسپایل عملاً صفره و حدود ۲٫۹ برابر از tsx سریعتره.
Nub یه پکیجمنیجر کامل هم داره که لاکفایلِ فعلیِ پروژه (npm/pnpm/Bun) رو با همون فرمت میخونه و مینویسه، و امنیتش پیشفرض سفتوسخته: اسکریپتهای lifecycle بهصورت deny-by-defaultان، دپندنسیهای غیرِرجیستری بلاک میشن، و نسخههای تازهمنتشرشده تا ۲۴ ساعت قرنطینه میمونن تا حملهٔ «پچ مخرب» بیاثر شه. نکتهٔ جالب اینه که هیچ API اختصاصیِ Nub وجود نداره؛ اگه فردا حذفش کنی، کدت بدون تغییر کار میکنه.
نکات کلیدی:
- Nub بهجای ساختِ رانتایمِ جدید، کد رو ترنسپایل میکنه و روی همون Node استوک اجرا میکنه؛ برای همین سازگاریاش خیلی بالاست (۹۸٫۸٪).
- TypeScript، JSX، دکوراتورها، مدیریت خودکار نسخهٔ Node و پُلیفیلِ APIهای مدرن رو یکجا داره.
- پکیجمنیجرش لاکفایل موجود رو حفظ میکنه و امنیتِ نصب (deny-by-default و قرنطینهٔ نسخهها) پیشفرض روشنه، بدون هیچ API قفلکننده.




