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

هاست Bun برای سرویس‌های TypeScript

Bun را با همان lockfile و اسکریپت‌هایی که روی سیستم خودتان دارید مستقر کنید. TypeScript بدون مرحله‌ی کامپایل جدا اجرا می‌شود و نصب وابستگی‌ها با bun install انجام می‌شود.

تشخیص
package.json و bun.lock یا bun.lockb
نسخه‌ها
Bun 1.2 و 1.1
نصب
bun install
پورت پیش‌فرض
3000
لوگوی Bun

Bun، بدون تنظیمات اضافه

وجود bun.lock یا bun.lockb کنار package.json کافی است تا پروژه Bun شناخته شود. وابستگی‌ها با bun install و از میرور داخلی نصب می‌شوند و برنامه با اسکریپت start یا فیلد main اجرا می‌شود.

Bun فایل‌های TypeScript را مستقیم اجرا می‌کند، پس برای یک API ساده مرحله‌ی build لازم ندارید. اگر خروجی باندل‌شده می‌خواهید، اسکریپت build را تعریف کنید تا قبل از اجرا ساخته شود.

مناسب برای

  • API سبک با Bun.serve یا Elysia
  • سرویس TypeScript بدون مرحله‌ی کامپایل
  • Hono روی Bun
  • ابزارهای داخلی و وب‌هوک

مسیر بیلد Bun

  1. تشخیص

    package.json و یکی از bun.lock یا bun.lockb در ریشه.

    bun.lock
  2. نصب

    وابستگی‌ها با نسخه‌های قفل‌شده نصب می‌شوند.

    bun install --frozen-lockfile
  3. بیلد

    اگر اسکریپت build باشد اجرا می‌شود؛ برای اجرای مستقیم TypeScript لازم نیست.

    bun run build
  4. اجرا

    اسکریپت start یا فایل main اجرا می‌شود.

    bun run index.ts

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 0.9MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [build 1/4] FROM oven/bun:1-alpine
#6 [build 2/4] RUN bun install --frozen-lockfile
#8 [build 3/4] COPY . .
#10 exporting to image
✔ Deployed — app is running.
→ https://my-bun-api.sakooapps.ir

کمترین چیزی که لازم دارید

Bun.serve را روی پورت PORT و 0.0.0.0 بالا بیاورید و اسکریپت start را تعریف کنید.

const port = Number(process.env.PORT) || 3000;

Bun.serve({
  port,
  hostname: "0.0.0.0",
  fetch() {
    return Response.json({ ok: true });
  },
});

تنظیمات

نسخه‌ی Bun

اگر نسخه‌ای اعلام نشود، آخرین نسخه‌ی 1.x استفاده می‌شود.

از کجا خوانده می‌شودنمونه
.bun-version1.2.4
engines.bun در package.json"bun": "1.2.x"
فلگ --runtime-version--runtime-version 1.2

فلگ‌های کاربردی هنگام ساخت اپ

فلگکاربرد
--runtime-versionقفل کردن نسخه‌ی toolchain، مثلاً 22 یا 3.12
--root-dirاستقرار یک پوشه از مونوریپو
--env-fileبارگذاری متغیرهای محیطی از فایل .env بعد از ساخت اپ
--endpointیک endpoint دیگر روی پورت جدا، مثلاً 8000:/ws:websocket

اتصال به دیتابیس

بعد از لینک کردن دیتابیس، DATABASE_URL در process.env و Bun.env در دسترس است.

sakoocloud apps link-db <db-id> --app my-bun-api

دیتابیس‌هایی که معمولاً کنارش می‌آیند

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

اپ بالا نمی‌آید یا مدام ری‌استارت می‌شود

علتبرنامه روی پورت ثابت یا فقط روی 127.0.0.1 گوش می‌دهد؛ پلتفرم ترافیک را به پورتِ متغیر PORT می‌فرستد.

راه‌حلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.

index.ts
Bun.serve({ port: Number(process.env.PORT) || 3000, hostname: "0.0.0.0", fetch });

دستور اجرا پیدا نمی‌شود

علتنه اسکریپت start تعریف شده و نه فیلد main.

راه‌حلیکی از این دو را در package.json اضافه کنید.

پروژه Node.js تشخیص داده می‌شود، نه Bun

علتلاک‌فایل Bun در مخزن نیست و فقط package-lock.json وجود دارد.

راه‌حلbun install را اجرا کنید و bun.lock را کامیت کنید، یا هنگام ساخت اپ --runtime bun بدهید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

TypeScript را باید کامپایل کنم؟

نه. Bun فایل .ts را مستقیم اجرا می‌کند. اگر باندل بهینه‌شده می‌خواهید، bun build را در اسکریپت build بگذارید.

کدام نسخه‌های Bun پشتیبانی می‌شوند؟

Bun 1.1 و 1.2. نسخه را در engines.bun یا .bun-version اعلام کنید.

Hono را روی Bun اجرا کنم؟

بله. برای Hono رانتایم hono را انتخاب کنید و --hono-runtime bun بدهید؛ صفحه‌ی Hono جزئیاتش را دارد.

جزئیات بیشتر در راهنمای Bun در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید