import Run from "/ar/snippets/cli/run.mdx";
تم تصميم وقت تشغيل Bun للبدء السريع والتشغيل السريع.
تحت الغطاء، يستخدم Bun محرك JavaScriptCore، الذي طورته Apple لمتصفح Safari. في معظم الحالات، أداء البدء والتشغيل أسرع من V8، المحرك المستخدم في Node.js ومتصفحات Chromium. تم كتابة المحول البرمجي ووقت التشغيل بلغة Zig، لغة حديثة عالية الأداء. على Linux، يترجم هذا إلى أوقات بدء أسرع 4 مرات من Node.js.
| الأمر | الوقت |
|---|---|
bun hello.js | 5.2ms |
node hello.js | 25.1ms |
يعتمد هذا المعيار على تشغيل سكربت Hello World بسيط على Linux
تشغيل ملف
استخدم bun run لتنفيذ ملف مصدر.
bun run index.jsيدعم Bun TypeScript و JSX خارج الصندوق. يتم تحويل كل ملف على الطاير بواسطة المحول البرمجي الأصلي السريع لـ Bun قبل تنفيذه.
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsxبدلاً من ذلك، يمكنك حذف كلمة run واستخدام الأمر "المجرد"؛ يتصرف بشكل متطابق.
bun index.tsx
bun index.js--watch
لتشغيل ملف في وضع المراقبة، استخدم العلم --watch.
bun --watch run index.tsx::: note عند استخدام bun run، ضع أعلام Bun مثل --watch مباشرة بعد bun. :::
bun --watch run dev # ✔️ افعل هذا
bun run dev --watch # ❌ لا تفعل هذاالأعلام التي تظهر في نهاية الأمر سيتم تجاهلها وتمريرها إلى سكربت "dev" نفسه.
تشغيل سكربت package.json
::: note قارن بـ npm run <script> أو yarn <script> :::
bun [أعلام bun] run <script> [أعلام السكربت]يمكن لـ package.json الخاص بك تعريف عدد من "scripts" المسماة التي تتوافق مع أوامر shell.
{
// ... حقول أخرى
"scripts": {
"clean": "rm -rf dist && echo 'Done.'",
"dev": "bun server.ts"
}
}استخدم bun run <script> لتنفيذ هذه السكربتات.
bun run clean
rm -rf dist && echo 'تم.'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> لتنفيذ سكربت الحزمة الخاص بك.
bun run devلرؤية قائمة بالسكربتات المتاحة، شغل bun run بدون أي وسائط.
bun runquickstart 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.
#!/usr/bin/env node
// افعل أشياءبشكل افتراضي، يحترم Bun هذا shebang وينفذ السكربت بـ node. ومع ذلك، يمكنك تجاوز هذا السلوك باستخدام العلم --bun. لـ CLIs القائمة على Node.js، سيشغل هذا CLI بـ Bun بدلاً من Node.js.
bun run --bun viteالتصفية
في المستودعات الأحادية التي تحتوي على حزم متعددة، يمكنك استخدام وسيطة --filter لتنفيذ السكربتات في العديد من الحزم دفعة واحدة.
استخدم bun run --filter <name_pattern> <script> لتنفيذ <script> في جميع الحزم التي يتطابق اسمها مع <name_pattern>. على سبيل المثال، إذا كان لديك أدلة فرعية تحتوي على حزم مسماة foo و bar و baz، فإن تشغيل
bun run --filter 'ba*' <script>سينفذ <script> في كل من bar و baz، ولكن ليس في foo.
اعثر على مزيد من التفاصيل في صفحة الوثائق لـ filter.
bun run - لأنابيب الكود من stdin
يسمح لك bun run - بقراءة JavaScript أو TypeScript أو TSX أو JSX من stdin وتنفيذه دون الكتابة إلى ملف مؤقت أولاً.
echo "console.log('Hello')" | bun run -Helloيمكنك أيضاً استخدام bun run - لإعادة توجيه الملفات إلى Bun. على سبيل المثال، لتشغيل ملف .js كما لو كان ملف .ts:
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.jsThis is TypeScript!للراحة، يتم التعامل مع جميع الكود كـ TypeScript مع دعم JSX عند استخدام bun run -.
bun run --console-depth
تحكم في عمق فحص الكائن في إخراج console باستخدام العلم --console-depth.
bun --console-depth 5 run index.tsxيحدد هذا مدى عمق عرض الكائنات المتداخلة في إخراج console.log(). العمق الافتراضي هو 2. القيم الأعلى تعرض خصائص أكثر تداخلاً ولكن قد تنتج إخراجاً مطولاً للكائنات المعقدة.
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 لتقليل استخدام الذاكرة على حساب الأداء.
bun --smol run index.tsxيتسبب هذا في تشغيل جامع القمامة بشكل أكثر تكراراً، مما قد يبطئ التنفيذ. ومع ذلك، يمكن أن يكون مفيداً في البيئات ذات الذاكرة المحدودة. يضبط Bun تلقائياً حجم كومة جامع القمامة بناءً على الذاكرة المتاحة (مع حساب حدود cgroups وحدود الذاكرة الأخرى) مع وبدون العلم --smol، لذا فإن هذا مفيد في الغالب للحالات التي تريد فيها جعل حجم الكومة ينمو ببطء أكثر.
ترتيب القرار
يتم دائماً تنفيذ المسارات المطلقة والمسارات التي تبدأ بـ ./ أو .\\ كملفات مصدر. ما لم تستخدم bun run، فإن تشغيل ملف بامتداد مسموح به سيفضل الملف على سكربت package.json.
عندما يكون هناك سكربت package.json وملف بنفس الاسم، يعطي bun run الأولوية لسكربت package.json. ترتيب القرار الكامل هو:
- سكربتات package.json، مثلاً
bun run build - ملفات المصدر، مثلاً
bun run src/main.js - الثنائيات من حزم المشروع، مثلاً
bun add eslint && bun run eslint - (
bun runفقط) أوامر النظام، مثلاًbun run ls