Bun برای ابزار Next.js؛ Node همانجا که پروداکشن صورتحساب را میدهد
سؤال «Bun برای پروداکشن آماده است؟» بد شروع میشود. آماده برای چه. برای `bun install`، برای اجرای یک اسکریپت seed به زبان TypeScript، یا برای `bun --bun next start` زیر ترافیک واقعی. این سه سطح ریسک یکی نیستند.
برای تیم Next.js با App Router، تقسیم مفید این است. درد محلی را با Bun کم کن: نصب سرد، اسکریپت داخلی، تعویض شاخه که مدیر بسته گران میکند. اجرای پروداکشن را روی Node نگه دار، مخصوصاً اگر Vercel یا دستور کار حادثه هنوز فرضش V8 است، تا addon بومی و گوشه middleware را واقعاً ممیزی کرده باشی.
هر کدام در ریپوی Next.js چه چیزی را مالکاند
Node هنوز داستان پیشفرض اجرای Next.js است. `create-next-app`، `next build`، و رانتایم مدیریتشده Vercel برای رندر سرور و Route Handler روی فرآیند سازگار با Node حساب میکنند. Node جدیدتر برای خیلی اسکریپتها نوع TypeScript را هم کنار میزند. این مزیت «اجرای `.ts` بدون لودر» در Bun را باریک میکند، حذف نمیکند. اگر محصول از قبل روی Vercel میرود، Bun محلی عوض نمیکند چه چیزی HTML پروداکشن را سرو میکند.
Bun همزمان رانتایم، مدیر بسته، و ابزار اجرای اسکریپت است، با موتور JavaScriptCore نه V8. `bun install` همان `package.json` و رجیستری npm را میخواند. `bunx` جای خیلی از `npx` را میگیرد. اجرای بومی TypeScript برای ابزار داخلی، نیاز به `tsx` را کم میکند. اینها برد حلقه توسعه است.
Turbopack رقیب Bun نیست. Turbopack بستهبند افزایشی خود Next.js است. Bun میتواند CLI را اجرا کند و ماژول را حل کند. وقتی Turbopack را روشن میکنی، بستهبندی فریمورک هنوز مال همان است. مقایسه «Bun یا Turbopack» یک اسپرینت را بیجهت میسوزاند.
Bun را کجا بدون درام وارد کن
نصب سرد در ورود نفر جدید و در cache missهای CI درد اصلی است و تیم قبول دارد قفل وابستگی و کلید کش عوض شود. اسکریپتهای داخلی TypeScriptاند: مهاجرت Drizzle، seed، کدجن، اصلاح یکباره داده. مونوریپو آنقدر بزرگ است که انتظار npm یا yarn در کار روزانه دیده میشود. و قرار است پروداکشن روی Node بماند، چه Vercel چه کانتینر Node، در حالی که محلی و شاید CI از Bun برای نصب و اسکریپت استفاده میکنند.
مسیر کمریسک مکانیکی است. Bun را کنار Node بگذار. `bun install` را برای حلقه محلی راه بینداز. `next build` و شروع پروداکشن را روی Node نگه دار. اول seed و کدجن را به Bun ببر. سرعت ساخت اولیه پروژه جایزه محصول نیست. تکرار نصب و بالا آمدن اسکریپت جایزه است.
قبل از اینکه کسی `next start` را با رانتایم Bun در پروداکشن امتحان کند، addon بومی را ممیزی کن. ماژولی که برای V8 کامپایل شده روی JavaScriptCore بالا نمیآید. `bcrypt` قدیمی و بعضی بیلدهای `canvas` هنوز میشکنند. مسیر جایگزین `bcryptjs`، رمز خود Bun، یا ماندن همان مسیر روی Node است. middleware و آداپتور Auth.js را اگر روزی فرآیند Next را با Bun بالا آوردی جدا کلیک کن. فقط عوض کردن دستور نصب، آن مسیر را پوشش نمیدهد.
قفل فایل را در بازبینی جدی بگیر. اگر نصف تیم npm ci میزند و نصف bun install، دو حقیقت از درخت وابستگی میسازی. یکی را برای نصب روزانه انتخاب کن و در سند کوتاه ریپو بنویس. CI باید همان را اجرا کند وگرنه «روی ماشین من سبز است» برمیگردد.
Node را کجا دست نزن
هر جا غافلگیری پروداکشن گران است. رانتایم مدیریتشده که صریحاً Node میخواهد. کتابخانه بومی که فروشنده فقط بیلد V8 داده. دستور کار حادثه که ابزارهای حافظه و پروفایل را روی V8 بلد است. تست بار که هنوز روی Node خط مبنا دارد و نمیخواهی همزمان موتور و کد را عوض کنی.
ارتقای کنجکاوی «چون یک نوشته گفته سریعتر است» دلیل جابهجایی سرور نیست. اگر میخواهی رانتایم را عوض کنی، معیار را از قبل بنویس: مسیر واقعی، نه hello world. مصرف حافظه، زمان شروع، رفتار middleware، و یک کتابخانه بومی که واقعاً در درخت تو هست. بدون اینها، برد محلی نصب را با ریسک اجرا قاطی کردهای.
Node را هم مذهبی نکن. اگر نصب سرد هر روز زمان مهندس میگیرد، وفاداری به npm بهتنهایی فضیلت نیست. مدیر بسته ابزار است. صورتحساب پروداکشن جای آزمایش خاموش نیست.
چه چیزی را عمداً عقب بینداز
تعویض ایمیج پروداکشن در همان هفتهای که قفل نصب عوض شده. اجرای تست E2E روی دو رانتایم بدون اینکه بدانی اختلاف از کجاست. حذف Node از ماشین توسعهدهنده تا وقتی سند و CI هر دو راه Bun-only را پوشانده باشند. و مقایسه عدد میکروبنچمارک در اسلاید بهجای زمان ورود نفر جدید که تیم واقعاً حس میکند.
یک نشانه عملی: زمان نصب سرد را قبل و بعد، روی همان شبکه و همان قفل، یکبار اندازه بگیر و در یادداشت PR بنویس. اگر برد فقط روی ماشین گرم دیدی، هنوز دلیلی برای عوض کردن عادت تیم نیست.
اگر فقط یک تغییر این ماه مجاز است، همان نصب و اسکریپت را جدا کن. اجرای `next start` را برای وقتی بگذار که فهرست addon بومی را کسی با اسم بسته نوشته باشد، نه با حس.
پرسشهای کوتاه
Vercel با Bun محلی مشکل دارد؟ برای توسعه محلی معمولاً نه، چون خروجی بیلد را Node آنجا اجرا میکند. مشکل وقتی است که فرض کنی محیط محلی عین فرآیند پروداکشن شده.
Bun تست رانر را هم جایگزین کنم؟ فقط اگر مجموعه تستتان ساده است و اختلاف رفتار برایتان مهم نیست. جابهجایی همزمان مدیر بسته و رانر تست، علت شکست را قاطی میکند.
اسکریپت را با Node 22 و بدون Bun اجرا کنم کافی نیست؟ برای خیلی اسکریپتها بله. Bun را جایی بیاور که نصب یا استارتآپ اسکریپت واقعاً گلوگاه است، نه برای یکسان شدن برند ابزار.