بررسی 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 را نصب می‌کنید، عملاً ابزارهای متعددی که قبلاً جداجدا نصب می‌کردید را یک‌جا به دست می‌آورید:

  1. پکیج منیجر فوق‌العاده سریع (nub install): با فایل‌های lockfile ابزار pnpm کاملاً سازگار است.
  2. اجرای مستقیم فایل‌های تایپ‌اسکریپت (nub index.ts): بدون نیاز به کانفیگ اضافه، tsx یا ts-node. کدها در حافظه با ابزار قدرتمند oxc ترانسپایل شده و ۲.۹ برابر سریع‌تر از tsx اجرا می‌شوند.
  3. اسکریپت رانر سریع (nub run): تا ۲۴ برابر سریع‌تر از pnpm run.
  4. جایگزین npx با نام nubx: اجراکننده دستورات .bin تا ۱۹ برابر سریع‌تر از npx.
  5. مدیریت نسخه Node.js (nub node install): درست مثل nvm یا fnm عمل می‌کند و با خواندن فایل‌های .node-version نسخه مناسب را دانلود و اجرا می‌کند.
  6. پشتیبانی نیتیو از JSX، Decorators و فایل‌های YAML/TOML: امکان import مستقیم فایل‌های تنظیمات بدون نیاز به نصب کتابخانه‌های جانبی.
  7. بارگذاری خودکار فایل‌های .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 بهینه‌سازی کرده، منطقی‌ترین مسیر برای آینده اکوسیستم جاوااسکریپت است. پیشنهاد می‌کنم حتماً روی یکی از پروژه‌های شخصی‌تان امتحانش کنید!