پرش به محتوای اصلی
پرش به محتوای مقاله

Nub در برابر Bun؛ سرعت Rust بدون جایگزینی محیط اجرا

·۳ تیر ۱۴۰۵۷ دقیقه مطالعه
لوگوی GitHub و نام مخزن nubjs/nub: ابزارک سریع همه‌کاره Node.js
لوگوی GitHub و نام مخزن nubjs/nub: ابزارک سریع همه‌کاره Node.js
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

ایجاد یک لایه‌ی تقویت‌کننده (Augmentation) به‌جای جایگزینی Runtime؛ که اجازه می‌دهد سرعت Bun را در محیط پایدار و استاندارد Node.js تجربه کنید.

۱۴.۷ میلی‌ثانیه؛ این تمام زمانی است که Nub برای اجرای یک اسکریپت نیاز دارد. این یک جهش عظیم در مقایسه با تأخیر ۳۰۰ میلی‌ثانیه‌ای است که معمولاً توسط npm run ایجاد می‌شود. با تقویت Node.js به جای جایگزینی آن، این جعبه‌ابزار قدرتمند که با زبان Rust نوشته شده، به توسعه‌دهندگان اجازه می‌دهد پایداری استانداردهای Node را حفظ کنند و در عین حال، سرعت و تجربه توسعه (DX) محیط‌های مدرنی مانند Bun را به دست آورند.

برای سال‌ها، برنامه‌نویسان با یک تضاد دشوار روبرو بودند: یا باید از اکوسیستم عظیم Node.js استفاده می‌کردند یا به دنبال تجربه توسعه برتر در ابزارهای جدید می‌رفتند. در حالی که Bun و Deno پشتیبانی داخلی از TypeScript و زمان شروع (Startup) سریع‌تری ارائه می‌دادند، اما استفاده از آن‌ها مستلزم مهاجرت به یک Runtime متفاوت و پذیرش ریسک «قفل شدن توسط فروشنده» (Vendor Lock-in) بود. Nub این مشکل را با عمل کردن به عنوان یک لایه تقویت‌کننده (Augmentation Layer) حل می‌کند، نه یک جایگزین کامل. در اینجا هیچ Runtime جدیدی وجود ندارد، هیچ API خاصی برای یک فروشنده تعریف نشده و هیچ ریسک قفل شدنی در کار نیست.

موتور سرعت

طبق بنچمارک‌های عملکردی منتشر شده در گیت‌هاب، Nub با حذف تأخیر بوت‌استرپ (Bootstrap) در Node.js، ابزارهای سنتی مبتنی بر جاوااسکریپت را شکست می‌دهد. از آنجایی که این Runner یک فایل باینری Rust است و خودش هیچ فرآیند راه‌اندازی جاوااسکریپتی ندارد، اسکریپت‌های گرم (Warm Scripts) را تقریباً به‌صورت آنی دیسپچ می‌کند. نتایج به‌دست آمده بسیار چشمگیر هستند:

  • دیسپچ اسکریپت از طریق nub run ۲۴ برابر سریع‌تر از pnpm run است (۱۴.۷ میلی‌ثانیه در برابر ۴۴۲.۷ میلی‌ثانیه).
  • اجرای پکیج‌ها از طریق nubx ۱۹ برابر سریع‌تر از npx عمل می‌کند (۱۱ میلی‌ثانیه در برابر ۲۲۶ میلی‌ثانیه).
  • نصب وابستگی‌ها با nub install حدود ۲.۵ برابر سریع‌تر از pnpm install است (۱۱۲۲ میلی‌ثانیه در برابر ۲۸۴۷ میلی‌ثانیه).

Nub CI status

یکپارچه‌سازی ابزارها و مدیریت Runtime

Nub جریان‌های کاری پراکنده را با یکپارچه کردن چندین ابزار مجزا در یک باینری واحد جایگزین می‌کند. به‌جای مدیریت همزمان و دشوار tsx، nodemon و nvm، کاربران می‌توانند از یک رابط واحد استفاده کنند.

اجرای فایل (nub <file>)
Nub به عنوان جایگزینی مستقیم برای node ،tsx ،ts-node و dotenv-cli عمل می‌کند. این ابزار از طیف گسترده‌ای از پسوندها شامل .js ،.ts ،.mjs ،.cjs ،.mts ،.cts ،.jsx و .tsx پشتیبانی می‌کند.

  • تایپ‌اسکریپت و JSX: شما می‌توانید فایل‌هایی مانند nub index.ts را بدون نیاز به هیچ مرحله Build اجرا کنید.
  • عملکرد: ادعا می‌شود که سرعت شروع اجرای آن ۲.۹ برابر سریع‌تر از tsx است.
  • حالت Watch Mode: برای جایگزینی nodemon یا node --watch ،دستور nub watch src/server.ts گراف وابستگی‌های حل‌شده را به‌طور خودکار ردیابی می‌کند. همچنین موارد خارج از گراف مانند فایل‌های .env ،package.json و زنجیره گسترش (extends) در tsconfig.json را زیر نظر می‌گیرد.

مدیریت نسخه Node
مدیریت نسخه Node اکنون از طریق nub node خودکار شده است. وقتی فایلی را اجرا می‌کنید، Nub نسخه Node مورد نیاز را استنباط کرده و در صورت نیاز، آن را به‌طور خودکار نصب می‌کند. این ابزار ترتیب اولویت‌های زیر را برای بررسی نسخه چک می‌کند:
۱. متغیر NODE_EXECUTABLE (برای بازنویسی یا Override)
۲. فیلد package.json#devEngines
۳. فایل .node-version
۴. فایل .nvmrc
۵. فیلد package.json#engines

به عنوان مثال، اجرای دستور echo 26 > .node-version و سپس nub hello.ts منجر به این می‌شود که Nub نسخه ۲۶.۳.۰ Node.js را شناسایی کرده و در صورت عدم وجود، در حدود ۹.۸ ثانیه نصب کند. کاربران همچنین می‌توانند به‌صورت دستی نسخه‌ها را از طریق دستورات nub node install ،ls ،uninstall و pin مدیریت کنند.

تقویت‌های فنی

Nub از سطوح گسترش (Extension Surfaces) در Node استفاده می‌کند که در زمان ساخت Deno و Bun اساساً وجود نداشتند. این ابزار از --import و --require برای پیش‌بارگذاری module.registerHooks() جهت تبدیل کد (Transpilation) و رزولوشن استفاده می‌کند. همچنین کتابخانه oxc را برای تبدیل سریع کدها در خود جای داده است. این معماری امکانات زیر را فراهم می‌کند:

  • پشتیبانی کامل از TypeScript، شامل Enums و Namespaces.
  • رزولوشن سازگار با تایپ‌اسکریپت، شامل Importهای بدون پسوند و پشتیبانی از tsconfig.json#paths.
  • پشتیبانی از Decorators، ویژگی emitDecoratorMetadata و نحوهای مدرنی مانند using (که در صورت نیاز توسط ترنسپایلر پایین‌رده یا Downlevel می‌شوند).
  • بارگذاری خودکار فایل‌های .env* که آن را با Next.js و Vite هم‌تراز می‌کند.
  • لودرهای داخلی برای فرمت‌های داده‌های رایج: .yaml ،.toml ،.jsonc ،.json5 و .txt.
  • پولی‌فیل‌ها (Polyfills) برای Temporal ،Worker ،URLPattern ،WebSocket و EventSource.

پولی‌فیل APIها و فعال‌سازی ویژگی‌ها

برای پر کردن شکاف بین نسخه‌های مختلف Node، ابزار Nub تضمین می‌کند که APIهای مدرن بدون تنظیمات اضافی کار کنند.

  • پولی‌فیل در نسخه‌های پایین‌تر از حد مشخص: Temporal (در نسخه‌های پایین‌تر از Node 26)، URLPattern ،RegExp.escape ،Error.isError ،Promise.try و Float16Array (همگی در نسخه‌های پایین‌تر از Node 24)، و navigator.locks (پایین‌تر از Node 24.5).
  • فعال‌سازی ویژگی‌های بومی (Unflagged): node:sqlite (بومی از Node 22.13)، vm.Module ،ShadowRealm ،Wasm module imports (بومی در نسخه‌های بالای Node 24.5)، WebSocket (بومی از Node 22) و EventSource (بومی در نسخه‌های بالای Node 20.18).

مدیریت پکیج و امنیت

مدیریت پکیج‌ها توسط موتور Aube هدایت می‌شود و برای حفظ «حافظه عضلانی» برنامه‌نویسان، با پرچم‌های pnpm سازگاری کامل دارد. این ابزار از دستورات nub install ،nub ci ،nub add -E -D --save-catalog ،nub remove ،nub update و nub dedupe پشتیبانی می‌کند.

برای ارتقای امنیت، Nub چندین تنظیم پیش‌فرض را اعمال می‌کند:

  • مسدودسازی اسکریپت‌ها: اجرای اسکریپت‌های postinstall به‌طور پیش‌فرض مسدود می‌شود تا از اجرای کدهای مخرب جلوگیری شود.
  • اسکن آسیب‌پذیری: در هنگام رزولوشن، به‌طور خودکار osv.dev را برای یافتن نسخه‌های شناخته‌شده مخرب بررسی می‌کند.
  • اصالت (Provenance): به‌طور پیش‌فرض از کاهش سطح اصالت (Provenance Downgrade) خودداری می‌کند.
  • عمر انتشار: به‌طور پیش‌فرض یک بازه زمانی ۲۴ ساعته (minimumReleaseAge) را برای نسخه‌های جدید الزامی می‌کند.

یکپارچه‌سازی و سازگاری

Nub مدیر پکیج موجود در پروژه را از طریق package.json#packageManager یا Lockfileها شناسایی می‌کند و سپس در حالت «سازگاری» (Compat-mode) اجرا شده و متغیرهای محیطی و تنظیمات خاص را رعایت می‌کند:

  • npm: خواندن package-lock.json ،.npmrc ،Overrides و Workspaces.
  • pnpm: خواندن pnpm-lock.yaml ،pnpm-workspace.yaml ،.pnpmfile.cjs و catalog:.
  • Yarn: پشتیبانی فقط-خواندنی (Read-only) برای yarn.lock ،.yarnrc.yml و packageExtensions.
  • Bun: خواندن bun.lock ،bunfig.toml و trustedDependencies.

برای خط‌لوله‌های CI/CD، اکشن nubjs/setup-nub@v0 به عنوان جایگزینی کاملاً سازگار برای actions/setup-node@v4 در GitHub Actions عمل می‌کند.

برای کسانی که مدیران پکیج فعلی خود را ترجیح می‌دهند، nub pm shim یک پیاده‌سازی Rust-native از وظایف Corepack ارائه می‌دهد. این ابزار Shimeهای جهانی را برای npm ،yarn و pnpm ثبت می‌کند. وقتی کاربر یکی از این نام‌های مستعار را فراخوانی می‌کند، Shim نسخه پین‌شده پروژه را شناسایی کرده، در صورت لزوم آن را نصب و سپس دستور را اجرا می‌کند. این قابلیت به‌ویژه پس از آنکه Corepack در نسخه ۲۵ Node از بسته اصلی حذف شد، بسیار کاربردی است.

این تغییر رویکرد نشان می‌دهد که آینده اکوسیستم Node لزوماً در جایگزینی Runtime نیست، بلکه در بهینه‌سازی «چسب» (Glue) اطراف آن است. با انتقال لایه تجربه توسعه به زبان Rust، ابزار Nub «مالیات عملکردی» را که برای انعطاف‌پذیری پرداخت می‌شد، حذف می‌کند. اثر ثانویه این تحول، کاهش موانع برای تیم‌ها در جهت پذیرش پین کردن دقیق نسخه‌ها و جریان‌های کاری سریع TypeScript بدون رها کردن شبکه ایمنی Node.js است.

توسعه‌دهندگان می‌توانند با اجرای اسکریپت نصب برای macOS/Linux (curl -fsSL https://nubjs.com/install.sh | bash) یا Windows PowerShell (irm https://nubjs.com/install.ps1 | iex) شروع کنند، یا اینکه پکیج @nubjs/nub را از طریق دستور npm install -g --ignore-scripts=false @nubjs/nub نصب نمایند.

چرا این موضوع مهم است؟

این ابزار با تکیه بر اعتبار و سرعت زبان Rust، تجربه توسعه را بدون ریسک مهاجرت به محیط‌های جدید متحول می‌کند. حذف تأخیرهای بوت‌استرپ در مقیاس پروژه‌های بزرگ، ساعت‌ها در زمان توسعه و اجرای CI/CD صرفه‌جویی می‌کند.

تأثیر برای ایران

ابزارهای متن‌باز و رایگانی مثل Nub برای توسعه‌دهندگان ایرانی که با محدودیت سخت‌افزاری یا سرعت پایین CI/CD مواجه‌اند، راهکاری ایده‌آل برای افزایش بهره‌وری بدون نیاز به تغییر زیرساخت است.

·نگاه ما
تحریریه دات‌هوش

استراتژی Nub هوشمندانه است؛ به‌جای جنگیدن با اکوسیستم عظیم Node.js برای جایگزینی کامل، روی «چسب» یا لایه‌ی مدیریت تمرکز کرده است. این رویکرد نشان می‌دهد که آینده‌ی ابزارهای توسعه نه در تغییر Runtime، بلکه در حذف مالیاتِ عملکردی (Performance Tax) لایه‌های مدیریت است که با زبان‌هایی مثل Rust ممکن می‌شود.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.