۱۴.۷ میلیثانیه؛ این تمام زمانی است که 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است (۱۱۲۲ میلیثانیه در برابر ۲۸۴۷ میلیثانیه).
یکپارچهسازی ابزارها و مدیریت 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 نصب نمایند.




گفتگو