Bun یک پروژه جاه طلبانه است که به سرعت به عنوان یک جایگزین و جایگزین سریعتر برای Node.js در حال ظهور است. در اینجا نگاهی به نحوه عملکرد Bun و نحوه استفاده از آن برای برنامه های جاوا اسکریپت سمت سرور خود می اندازیم.
- Bun در مقابل Node.js
- یک برنامه Bun React را نصب و اجرا کنید
- برگردان و ماژول ها
- بعنوان سرور
- رویکردی جدید برای جاوا اسکریپت سمت سرور
Bun.js یک جعبه ابزار جاوا اسکریپت همه کاره است که نام ساده آن پتانسیل تحول آفرین آن را رد می کند. Bun چندین موضوع مهم را در جاوا اسکریپت سمت سرور گرد هم می آورد و در نتیجه یک ابزار واحد و با کارایی بالا ایجاد می کند. این یک زمان اجرا مانند Node یا Deno، یک مدیریت بسته مانند NPM یا pnpm
و یک ابزار ساخت مانند webpack یا Vite است. این به سرعت از یک پروژه جانبی یک نفره به یک جایگزین قانع کننده برای رویکردهای استاندارد تبدیل شده است.
Bun در مقابل Node.js
Bun.js اساساً یک زمان اجرا جاوا اسکریپت سمت سرور مانند Node است. در بالای این یک مدیر بسته و یک باندلر/ترنسپایلر گنجانده شده است. زمان اجرا به خودی خود تمرکز فعلی توسعه است و کامل ترین بخش پروژه است. مدیر بسته توسعهیافته بعدی است و باندلر آلفاترین مرحله در حال حاضر است.
خالق Bun، جرد سامنر به من گفت: «ما میخواهیم جاوا اسکریپت را سریعتر اجرا کنیم و نوشتن را سادهتر کنیم. بخش مهمی از آن سازگاری اکوسیستم است. Bun به عنوان یک جایگزین Node.js طراحی شده است. افراد برای استفاده از Bun نباید کد خود را بازنویسی کنند.”
Bun از ابتدا با موتور WebKit/Safari JavaScriptCore ساخته شده است (به جای V8 مانند Node). این یک فورک Node نیست. کتابخانهها در C و Zig ساخته شدهاند و به صراحت از هر گونه وابستگی Node یا NPM اجتناب میکند، در نتیجه جاوا اسکریپت را در پشته آن به حداقل میرساند. این تصمیمات همه در خدمت به حداکثر رساندن عملکرد هستند. بازنویسی جهان APIهای پیادهسازیشده با جاوا اسکریپت مانند شبکه و دیسک IO در زبان سطح پایینتر، باعث افزایش عملکرد بسیار میشود. همچنین این یک اقدام به یاد ماندنی است.
Bun قصد دارد کل Node/NPM API را پوشش دهد و به سرعت به سمت آن هدف حرکت می کند. در اینجا نقشه راه پروژه Bun است، که در آن می توانید حسی از محدوده پروژه و سرعت حرکت آن علاوه بر این، فهرستی از ویژگیهای برنامهریزیشده وجود دارد که هنوز پیادهسازی نشدهاند. متوجه خواهید شد که Bun دارای ویژگی های لبه گرا و موارد دیگر است. این در واقع یک اکوسیستم کامل جاوا اسکریپت است که بر روی یک موتور زمان اجرا ساخته شده است.
Bun در حال توسعه فعال است و توسعه دهندگان آن اذعان دارند که “این نرم افزار آزمایشی است.” در حال حاضر، تمرکز بر گسترش و تثبیت زمان اجرا جاوا اسکریپت است. این پروژه در حال حاضر نسخه ۰.۵.۵ است.
اکنون که میدانیم اتوبوس برای چه منظوری در نظر گرفته شده است و میدانیم که مسیر رشد آن کجاست، بیایید دست خود را به Bun بگیریم!
یک برنامه Bun React را نصب و اجرا کنید
شما می توانید Bun را به عنوان یک بسته بومی در هر سیستم عاملی نصب کنید. همچنین می توانید آن را به عنوان بسته جهانی NPM نصب کنید. ممکن است نصب یک جایگزین NPM با NPM کمی عجیب باشد، اما مطمئناً نصب را آسان می کند.
$ npm install -g bun
$ bun -v
۰.۵.۵
فرمان bun
اکنون در خط فرمان شما موجود است. بیایید از Bun برای ایجاد یک برنامه جدید React استفاده کنیم. این مانند وارد کردن است: npx create-react-app my-app
. اگر با استفاده از npx
(که در NPM/Node اجرا می شود) آشنا هستید، بلافاصله متوجه خواهید شد که استفاده از Bun چقدر سریع کار می کند. برای شروع یک پروژه جدید با استفاده از کتابخانه های create-react-app
، دستور را در لیست ۲ اجرا کنید.
$ bun create react ./bun-react
[package.json] Detected React - added "react-refresh"
$ bun install // This happens automatically
[۱۲.۰۰ms] bun install
$ bun bun ./src/index.jsx // this happens automatically
[۷۲۰.۰۰ms] bun create react
توجه داشته باشید که دو دستور دوم را وارد نمیکنید. آنها به طور خودکار به عنوان بخشی از دستور اولیه رخ می دهند. ممکن است تعجب کنید که کل دستور کمتر از یک ثانیه طول کشید از جمله نصب ماژول های Node.
اکنون می توانید cd
را در فهرست bun-react/
وارد کنید و سرور توسعه را با bun dev
راه اندازی کنید. سپس میتوانید از برنامه در localhost:3000 دیدن کنید، جایی که یک صفحه خوشآمدگویی مانند تصویر نشاندادهشده در شکل ۱ خواهید دید.
شکل ۱. صفحه خوش آمدگویی برنامه Bun React
اگر به فایل package.json
نگاهی بیندازید، میبینید که همان فایلی است که در غیر این صورت میبود و هیچ چیز خاصی به Bun اضافه نشده است. Bun دقیقاً همان کاری را انجام می دهد که NPM انجام می دهد، اما سریعتر.
برای بررسی سریع غیرعلمی، دایرکتوری /mode_modules
را rm -rf
و وابستگیها را با bun install
(چهار میلیثانیه) دوباره نصب کردم ) در مقابل npm install
(دو ثانیه).
Bun برای استقرار لبه و بدون سرور
چیزی که اخیراً مشاهده کردید این است که Bun کار یک مدیر بسته و همچنین یک اجرا کننده اسکریپت را انجام می دهد. وقتی bun dev
را انجام دادید، معادل npm run dev
را انجام میدادید. زیبایی Bun دوباره سرعت است، اما این سرعت پیامدهایی برای مناطق دیگر نیز دارد. Bun در اجرای کار سریع است زیرا در راه اندازی سریع است. بیشتر زمان مورد نیاز برای اجرای یک کار با Node/NPM صرف شروع فرآیند Node می شود.
این واقعیت که Bun سریع شروع می شود یک ویژگی مهم در استقرارهای لبه و بدون سرور است، جایی که ایده آل “مقیاس به صفر” است. این بدان معناست که شما سیستمی می خواهید که بتواند گره هایی را برای پاسخگویی به تقاضا ایجاد کند. سپس، هنگامی که این تقاضا کاهش می یابد، باید گره ها را با قیمت ارزان کاهش دهد. یک مانع بزرگ برای چنین مقیاسپذیری، سرعتی است که گرهها با آن میتوانند به سمت بالا بچرخند. بنابراین، توانایی شروع و اجرای سریع اسکریپت ها به این معنی است که Bun برای محیط های محاسباتی بدون سرور و لبه مناسب است.
Bun for Next، Svelte و Vue
Bun میتواند کاری مشابه را با برنامه Next انجام دهد، با این دستور شروع میشود: bun create next./app
. برای دریافت لیستی از تمام دستورات create
موجود، bun create
را تایپ کنید. متوجه خواهید شد که حدود دوازده الگوی پشتیبانی شده در Bun .0.5.5 وجود دارد.
برای رسیدگی به موارد استفاده که در آن لودر داخلی در دسترس نیست، Bun.js شامل لودرهای قابل اتصال است. این امکان مدیریت فایلهای Svelte یا Vue را فراهم میکند، مانند .svelte
یا .vue
. میتوانید درباره لودرهای سفارشی Bun در اینجا اطلاعات بیشتری کسب کنید.
یک آداپتور آزمایشی SvelteKit برای اجرای SvelteKit در Bun وجود دارد. این بسیار در حال توسعه است، زیرا Bun API خود به سرعت در حال تکامل است و SvelteKit به آن APIها بستگی دارد. (به نظر می رسد الگوی SvelteKit که با bun create
به دست آمده است در حال حاضر کار نمی کند.)
نقل و ماژول ها
یکی از جاه طلبی های Bun جایگزینی مرحله ترانسپیلاسیون ساختمان است. این پیچیده است زیرا با بسیاری از فناوریهای مختلف، از CSS گرفته تا JSX سروکار دارد. اینها فناوری هایی هستند که در معرض تغییر و در نتیجه عوارضی مانند تکان دادن درختان و کوچک سازی هستند.
Bun همچنین باید با وضوح ماژول جاوا اسکریپت سر و کار داشته باشد، که مستندات Bun تصدیق می کند پیچیده است. حتی فکر کردن به این پیچیدگی بسیار زیاد است، و این همان چیزی است که اکثر مردم را از تلاش کردن چیزی مانند Bun باز می دارد. بازنویسی آنچه قبلاً بسیار خوب است (Node/NPM) با چیزی حتی بهتر، یک هدف عالی است.
من دوباره شما را به نقشه راه ارجاع می دهم که شامل مواردی است مربوط به transpiling، bundling، و وضوح ماژول.
Bun به عنوان سرور
Bun میتواند باینریهای WASM را اجرا کند سرور. همچنین می تواند درخواست های HTTP را با یک API داخلی که شبیه به یک محیط بدون سرور است، انجام دهد. بیایید نگاهی گذرا بیندازیم. اگر فایلی به نام server.ts
ایجاد کنیم و کد را در لیست ۳ اضافه کنیم، میتوانیم آن را با Bun اجرا کنیم.
export default {
port: 3000,
fetch(request: Request) {
return new Response("Hello InfoWorld");
}
};
برای اجرای سرور اکو، bun server.ts
را تایپ کنید. اگر به localhost:3000 مراجعه کنید، تبریک را خواهید دید. این کار به این دلیل کار میکند که اگر Bun یک شی صادرات پیشفرض را با روش واکشی پیدا کند، فرض میکند که یک سرور است. این را در Bun.serve
API میپیچد. میتوانید استفاده ساده از این API را در فهرست ۴ ببینید. در صورت لزوم، APIهای موجود در Bun از استانداردهای وب پیروی میکنند، بنابراین اشیاء درخواست و پاسخ استانداردهای آشنا هستند (یعنی درخواست). فهرست ۴ از شی Request
برای گرفتن URL واکشی شده و خروجی آن استفاده می کند.
Bun.serve({
fetch(req) {
return new Response("You visited: " + JSON.stringify(req.url));
},
});
توجه داشته باشید که APIهای Node Bun (NAPI) به اندازه کافی کامل نیستند هنوز Express را اجرا کنید. با این حال، تعدادی پروژه مشابه برای خود Bun وجود دارد. یک مثال BunRest است.
رویکردی جدید برای جاوا اسکریپت سمت سرور
نقشه راه Bun شامل بسیاری از کارهای باز است که حسی را ارائه می دهد از دامنه و جاه طلبی این پروژه. به نظر میرسد Bun واقعاً به فروشگاهی تکنظامی برای انجام بیشتر وظایف جاوا اسکریپت سمت سرور تبدیل شود، از جمله همه چیز، از فرآیندهای تخمگذاری گرفته تا میزبانی یک نمونه SQLite تعبیهشده تا اجرای تابع بومی با Bun FFI (رابط عملکرد خارجی).
به جای اینکه گردش کار این باشد: من باید کارهای جاوا اسکریپت را انجام دهم، بنابراین اجازه دهید تا زمان اجرا و مدیر بسته را دریافت کنم و ابزارهای خاص را برای ایجاد یک محیط کاری دانلود کنم، سپس ابزارهایی را برای کار در دست اجرا دارم، این می شود: بیایید تخته ها را نصب کنیم و ابزارهای مورد نیاز برای کار واقعی را دریافت کنیم.
همچنین جالب است که Bun از Zig در زیر کاپوت استفاده می کند. Zig نه تنها یک زبان برنامه نویسی بلکه یک مدیر بسته و ابزار ساخت همه در یک است. این یک روند معقول است، زیرا در گذشته هدف ما ایجاد یک زبان همه منظوره کار بود. این به خودی خود یک هدف به اندازه کافی بزرگ بود و سپس تمام حمایت های لازم برای توسعه و تولید پس از آن بسته شد.
امروزه، بسیاری از ما میدانیم که یک زبان به آن چیزها نیاز دارد، به ویژه یک مدیر بسته و ابزار ساخت. منطقی است که طراحان آنها را از ابتدا وارد زبان کنند. از نمای ۱۰۰۰۰ فوتی، به نظر می رسد که ما شاهد نسل جدیدی از ابزارهای برنامه نویسی هستیم که بر اساس آموخته های گذشته، ابزارها و ابزارهای کمکی را در سطح بالاتری راه اندازی می کنند. اکنون زمان بسیار جالبی برای ساختن نرم افزار است.
میخواهید به یادگیری در مورد Bun ادامه دهید؟ با این لیست از پروژههای جالب در اکوسیستم Bun.js شروع کنید.
پست های مرتبط
Bun.js را کاوش کنید: زمان اجرای جاوا اسکریپت همه کاره
Bun.js را کاوش کنید: زمان اجرای جاوا اسکریپت همه کاره
Bun.js را کاوش کنید: زمان اجرای جاوا اسکریپت همه کاره