بررسی nub: جایگزین پدر مادر دار npm
اگر در چند سال اخیر توسعهدهنده جاوااسکریپت یا تایپاسکریپت بوده باشید، احتمالاً شما هم مثل من مدام بین ابزارهای مختلف دستبهدست شدهاید. ابتدا با npm شروع کردیم که کند بودنش اعصاب همهمان را خرد میکرد. بعد سراغ pnpm رفتیم تا فضای دیسکمان نابود نشود و نصبها سریعتر انجام شوند. سپس Bun آمد و وعده داد که همهچیز را ده برابر سریعتر میکند، اما وقتی صحبت از محیط پروپوزالهای واقعی و پروداکشن شد، ناهماهنگیهای کوچک با Node.js کمکم باگهای عجیبی رو کرد.
حالا ابزار جدیدی وارد میدان شده که رویکرد کاملاً متفاوتی دارد: Nub.
در این پست میخواهم نگاهی بیندازم به اینکه Nub اصلاً چیست، چطور کار میکند، عملکردش در مقایسه با Bun ،pnpm و npm چگونه است و آیا وقت آن رسیده که ابزارهای قبلیمان را کنار بگذاریم یا نه.
چرا به یک ابزار جدید نیاز داریم؟ مشکلی که Nub حل میکند
بزرگترین مشکل ابزارهایی مثل Bun و Deno این است که تلاش میکنند رانتایم Node.js را بهطور کامل بازنویسی کنند. شاید روی کاغذ سرعت بالای آنها جذاب باشد، اما حقیقت این است که اکثر سرویسهای ابری بزرگ مثل AWS، GCP یا Azure هنوز Node.js را هدف اصلی و استاندارد خود میدانند. ناهماهنگی در APIهای داخلی باعث میشود خیلی از کتابخانههای بزرگ ناگهان روی Bun با خطا مواجه شوند.
سازندگان Nub با درک این موضوع، فلسفه متفاوتی را انتخاب کردهاند:
«بهجای جایگزین کردن Node.js، ابزارهای اطراف آن را ارتقا بده.»
ابزار Nub یک فایل اجرایی تکفایل (Single Binary) نوشتهشده با زبان Rust است. این ابزار خودش رانتایم جدیدی نیست؛ بلکه کدهای شما را کامپایل/ترانسپایل کرده و روی همان موتور استاندارد Node.js اجرا میکند. به همین دلیل طبق بنچمارکها، سازگاری آن با تستهای استاندارد Node بیش از ۹۸.۸٪ است (در مقایسه با ۷۷.۴٪ در Deno و ۴۰.۵٪ در Bun).
قابلیتهای کلیدی Nub: فقط یک پکیجمنیجر نیست!
وقتی Nub را نصب میکنید، عملاً ابزارهای متعددی که قبلاً جداجدا نصب میکردید را یکجا به دست میآورید:
- پکیج منیجر فوقالعاده سریع (
nub install): با فایلهای lockfile ابزار pnpm کاملاً سازگار است. - اجرای مستقیم فایلهای تایپاسکریپت (
nub index.ts): بدون نیاز به کانفیگ اضافه،tsxیاts-node. کدها در حافظه با ابزار قدرتمندoxcترانسپایل شده و ۲.۹ برابر سریعتر ازtsxاجرا میشوند. - اسکریپت رانر سریع (
nub run): تا ۲۴ برابر سریعتر ازpnpm run. - جایگزین npx با نام
nubx: اجراکننده دستورات.binتا ۱۹ برابر سریعتر ازnpx. - مدیریت نسخه Node.js (
nub node install): درست مثلnvmیاfnmعمل میکند و با خواندن فایلهای.node-versionنسخه مناسب را دانلود و اجرا میکند. - پشتیبانی نیتیو از JSX، Decorators و فایلهای YAML/TOML: امکان
importمستقیم فایلهای تنظیمات بدون نیاز به نصب کتابخانههای جانبی. - بارگذاری خودکار فایلهای
.env: نیازی به نصبdotenv
یا پاس دادن فلگهای طولانی نیست.
نحوه استفاده از Nub در پروژه؛ داستان Lockfile چیست؟
اگر تصمیم گرفتید برای اولین بار Nub را امتحان کنید، نحوه پیادهسازی و رفتار آن بسیار جالب و هوشمندانه است. نیازی نیست کل پروژه را بازنویسی کنید یا همکارانتان را مجبور به تغییر ابزار کنید.
وضعیت فعلی مدیریت Lockfile در Nub
در حال حاضر، Nub نقش یک «متا پکیجمنیجر» را ایفا میکند و طوری طراحی شده که بدون آسیب زدن به بقیه اعضای تیم کار کند:
- سازگاری مستقیم با Lockfileهای موجود: اگر پروژه شما از قبل شامل فایلهایی مثل
package-lock.json(برای npm) یاpnpm-lock.yaml(برای pnpm) باشد، Nub با همان فایلها کار میکند؛ یعنی آنها را میخواند، پکیجها را نصب میکند و در صورت اضافه کردن وابستگی جدید، دقیقاً همان فایل Lockfile قبلی را آپدیت میکند. - ایجاد
nub.lockبرای پروژههای جدید: اگر پروژهای از صفر بسازید یا هیچ Lockfileای نداشته باشد، Nub فایل اختصاصی خودش به نامnub.lockرا میسازد (که زیر کاپوت کاملاً بر پایه ساختار استانداردpnpm-lock.yamlاست). - کار تیمی بدون دردسر: اگر شما پکیجها را با Nub نصب کنید، فایل Lockfile قبلی پروژه آپدیت میشود و همکاران شما در تیم بدون اینکه حتی بدانند شما از Nub استفاده کردهاید، میتوانند با همان
npm installیاpnpm installبه کارشان ادامه دهند.
دستورات کاربردی برای شروع:
برای نصب سراسری:
Bash
npm install -g @nubjs/nub
نحوه دستورات کاملاً مشابه pnpm است تا هیچ منحنی یادگیری جدیدی نداشته باشد:
Bash
nub install # نصب همه وابستگیها nub add express # اضافه کردن پکیج جدید nub run dev # اجرای اسکریپتهای package.json nub index.ts # اجرای مستقیم تایپاسکریپت بدون کانفیگ
مقایسه بنچمارک و سرعت: Nub در برابر رقبا
یکی از جذابترین بخشهای معرفی Nub، بنچمارکهای نصب مجدد پروژهها (Warm Reinstall) با بیش از ۱۱۰۰ پکیج است. نتایج مقایسه زمان بازسازی node_modules بسیار جالب است:
| ابزار | زمان نصب مجدد (Warm Reinstall) | وضعیت سازگاری با Node.js |
| Nub | ۳۴۶ میلیثانیه | کامل (استفاده از خود Node) |
| Bun | ۱.۹ ثانیه | نسبی (رانتایم مستقل) |
| pnpm | ۳.۴۵ ثانیه | کامل |
| npm | ۱۲.۹ ثانیه | کامل (استاندارد پیشفرض) |
همانطور که میبینید، Nub در نصبهای گرم حدود ۵ برابر سریعتر از pnpm و حدود ۳۷ برابر سریعتر از npm عمل میکند!
مقایسه اجمالی چهار ابزار محبوب ۲۰۲۶
برای اینکه تصمیمگیری راحتتر شود، نقاط قوت و ضعف هر پکیجمنیجر را مرور میکنیم:
- npm: پیشفرض همه پروژهها و بیشترین سازگاری را دارد، اما کندترین گزینه است.
- pnpm: پادشاه پروژههای بزرگ و Monorepoهاست. مدیریت حافظه بسیار بهینهای دارد اما منحنی یادگیری کوتاهی برای تازهکارها دارد.
- Bun: سرعت فوقالعاده بالایی دارد و همهچیز را یکجا ارائه میدهد، اما اگر پروژهتان وابسته به APIهای خاص Node.js باشد ممکن است دچار باگهای رانتایم شوید.
- Nub: سرعت بسیار بالایی در ابزارها ارائه میدهد در حالی که خیال شما را از بابت استفاده از خود رانتایم رسمی Node.js راحت میکند. تنها ضعف فعلیاش جدید بودن پروژه و جامعه کاربری کوچکتر آن است.
آیا باید همین الان به Nub کوچ کنیم؟
پاسخ بستگی به نوع پروژه شما دارد:
- اگر پروژه پروداکشن حساس و Monorepo بزرگ دارید: فعلاً pnpm امنترین و پختهترین گزینه است.
- اگر میخواهید تجربهای کاملاً مستقل از Node داشته باشید: Bun گزینه هیجانانگیزی است.
- اگر میخواهید سرعت ابزارهای جدید را داشته باشید اما از استابیلیتی Node.js دست نکشید: Nub دقیقاً برای شما ساخته شده است. مهاجرت به آن تقریباً صفر هزینه دارد چون فایلهای
lockfileموجود شما را میشناسد و نیازی به تغییر کدهای قبلی ندارد.
شخصاً فکر میکنم رویکرد Nub که بهجای دوباره اختراع کردن چرخه، ابزارهای اطراف Node را با زبان Rust بهینهسازی کرده، منطقیترین مسیر برای آینده اکوسیستم جاوااسکریپت است. پیشنهاد میکنم حتماً روی یکی از پروژههای شخصیتان امتحانش کنید!