Skip to content

import Run from "/ar/snippets/cli/run.mdx";

تم تصميم وقت تشغيل Bun للبدء السريع والتشغيل السريع.

تحت الغطاء، يستخدم Bun محرك JavaScriptCore، الذي طورته Apple لمتصفح Safari. في معظم الحالات، أداء البدء والتشغيل أسرع من V8، المحرك المستخدم في Node.js ومتصفحات Chromium. تم كتابة المحول البرمجي ووقت التشغيل بلغة Zig، لغة حديثة عالية الأداء. على Linux، يترجم هذا إلى أوقات بدء أسرع 4 مرات من Node.js.

الأمرالوقت
bun hello.js5.2ms
node hello.js25.1ms

يعتمد هذا المعيار على تشغيل سكربت Hello World بسيط على Linux

تشغيل ملف

استخدم bun run لتنفيذ ملف مصدر.

bash
bun run index.js

يدعم Bun TypeScript و JSX خارج الصندوق. يتم تحويل كل ملف على الطاير بواسطة المحول البرمجي الأصلي السريع لـ Bun قبل تنفيذه.

bash
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsx

بدلاً من ذلك، يمكنك حذف كلمة run واستخدام الأمر "المجرد"؛ يتصرف بشكل متطابق.

bash
bun index.tsx
bun index.js

--watch

لتشغيل ملف في وضع المراقبة، استخدم العلم --watch.

bash
bun --watch run index.tsx

::: note عند استخدام bun run، ضع أعلام Bun مثل --watch مباشرة بعد bun. :::

bash
bun --watch run dev # ✔️ افعل هذا
bun run dev --watch # ❌ لا تفعل هذا

الأعلام التي تظهر في نهاية الأمر سيتم تجاهلها وتمريرها إلى سكربت "dev" نفسه.

تشغيل سكربت package.json

::: note قارن بـ npm run <script> أو yarn <script> :::

sh
bun [أعلام bun] run <script> [أعلام السكربت]

يمكن لـ package.json الخاص بك تعريف عدد من "scripts" المسماة التي تتوافق مع أوامر shell.

json
{
  // ... حقول أخرى
  "scripts": {
    "clean": "rm -rf dist && echo 'Done.'",
    "dev": "bun server.ts"
  }
}

استخدم bun run <script> لتنفيذ هذه السكربتات.

bash
bun run clean
rm -rf dist && echo 'تم.'
txt
Cleaning...
Done.

ينفذ Bun أمر السكربت في subshell. على Linux و macOS، يتحقق من shells التالية بالترتيب، باستخدام أول ما يجده: bash، sh، zsh. على Windows، يستخدم bun shell لدعم صيغة bash والعديد من الأوامر الشائعة.

NOTE

⚡️ وقت بدء `npm run` على Linux هو تقريباً 170ms؛ مع Bun هو `6ms`.

يمكن أيضاً تشغيل السكربتات بالأمر الأقصر bun <script>، ولكن إذا كان هناك أمر bun مدمج بنفس الاسم، فإن الأمر المدمج له الأسبقية. في هذه الحالة، استخدم الأمر الأكثر وضوحاً bun run <script> لتنفيذ سكربت الحزمة الخاص بك.

bash
bun run dev

لرؤية قائمة بالسكربتات المتاحة، شغل bun run بدون أي وسائط.

bash
bun run
txt
quickstart scripts:

 bun run clean
   rm -rf dist && echo 'Done.'

 bun run dev
   bun server.ts

2 scripts

يحترم Bun خطافات دورة الحياة. على سبيل المثال، bun run clean سينفذ preclean و postclean، إذا تم تعريفها. إذا فشل pre<script>، لن ينفذ Bun السكربت نفسه.

--bun

من الشائع أن تشير سكربتات package.json إلى CLIs المثبتة محلياً مثل vite أو next. غالباً ما تكون ملفات CLIs هذه ملفات JavaScript معلمة بـ shebang للإشارة إلى أنه يجب تنفيذها بـ node.

js
#!/usr/bin/env node

// افعل أشياء

بشكل افتراضي، يحترم Bun هذا shebang وينفذ السكربت بـ node. ومع ذلك، يمكنك تجاوز هذا السلوك باستخدام العلم --bun. لـ CLIs القائمة على Node.js، سيشغل هذا CLI بـ Bun بدلاً من Node.js.

bash
bun run --bun vite

التصفية

في المستودعات الأحادية التي تحتوي على حزم متعددة، يمكنك استخدام وسيطة --filter لتنفيذ السكربتات في العديد من الحزم دفعة واحدة.

استخدم bun run --filter <name_pattern> <script> لتنفيذ <script> في جميع الحزم التي يتطابق اسمها مع <name_pattern>. على سبيل المثال، إذا كان لديك أدلة فرعية تحتوي على حزم مسماة foo و bar و baz، فإن تشغيل

bash
bun run --filter 'ba*' <script>

سينفذ <script> في كل من bar و baz، ولكن ليس في foo.

اعثر على مزيد من التفاصيل في صفحة الوثائق لـ filter.

bun run - لأنابيب الكود من stdin

يسمح لك bun run - بقراءة JavaScript أو TypeScript أو TSX أو JSX من stdin وتنفيذه دون الكتابة إلى ملف مؤقت أولاً.

bash
echo "console.log('Hello')" | bun run -
txt
Hello

يمكنك أيضاً استخدام bun run - لإعادة توجيه الملفات إلى Bun. على سبيل المثال، لتشغيل ملف .js كما لو كان ملف .ts:

bash
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.js
txt
This is TypeScript!

للراحة، يتم التعامل مع جميع الكود كـ TypeScript مع دعم JSX عند استخدام bun run -.

bun run --console-depth

تحكم في عمق فحص الكائن في إخراج console باستخدام العلم --console-depth.

bash
bun --console-depth 5 run index.tsx

يحدد هذا مدى عمق عرض الكائنات المتداخلة في إخراج console.log(). العمق الافتراضي هو 2. القيم الأعلى تعرض خصائص أكثر تداخلاً ولكن قد تنتج إخراجاً مطولاً للكائنات المعقدة.

ts
const nested = { a: { b: { c: { d: "deep" } } } };
console.log(nested);
// مع --console-depth 2 (الافتراضي): { a: { b: [Object] } }
// مع --console-depth 4: { a: { b: { c: { d: 'deep' } } } }

bun run --smol

في البيئات المقيدة بالذاكرة، استخدم العلم --smol لتقليل استخدام الذاكرة على حساب الأداء.

bash
bun --smol run index.tsx

يتسبب هذا في تشغيل جامع القمامة بشكل أكثر تكراراً، مما قد يبطئ التنفيذ. ومع ذلك، يمكن أن يكون مفيداً في البيئات ذات الذاكرة المحدودة. يضبط Bun تلقائياً حجم كومة جامع القمامة بناءً على الذاكرة المتاحة (مع حساب حدود cgroups وحدود الذاكرة الأخرى) مع وبدون العلم --smol، لذا فإن هذا مفيد في الغالب للحالات التي تريد فيها جعل حجم الكومة ينمو ببطء أكثر.

ترتيب القرار

يتم دائماً تنفيذ المسارات المطلقة والمسارات التي تبدأ بـ ./ أو .\\ كملفات مصدر. ما لم تستخدم bun run، فإن تشغيل ملف بامتداد مسموح به سيفضل الملف على سكربت package.json.

عندما يكون هناك سكربت package.json وملف بنفس الاسم، يعطي bun run الأولوية لسكربت package.json. ترتيب القرار الكامل هو:

  1. سكربتات package.json، مثلاً bun run build
  2. ملفات المصدر، مثلاً bun run src/main.js
  3. الثنائيات من حزم المشروع، مثلاً bun add eslint && bun run eslint
  4. (bun run فقط) أوامر النظام، مثلاً bun run ls

Bun بواسطة www.bunjs.com.cn تحرير