Skip to content

bun install هو عميل npm متوافق مع Node.js مصمم ليكون خليفة سريعًا بشكل لا يصدق لـ npm.

لقد بذلنا الكثير من الجهد للتأكد من أن مسار الترحيل من npm install إلى bun install سهل مثل تشغيل bun install بدلاً من npm install.

  • مصمم لـ Node.js و Bun: bun install يثبت مجلد node_modules متوافق مع Node.js. يمكنك استخدامه بدلاً من npm install لمشاريع Node.js بدون أي تغييرات في الكود وبدون استخدام وقت تشغيل Bun.
  • يحول تلقائيًا package-lock.json إلى تنسيق ملف القفل bun.lock الخاص بـ bun، مع الحفاظ على إصدارات التبعيات المحلولة الموجودة بدون أي عمل يدوي منك. يمكنك استخدام bun install سراً بدلاً من npm install في العمل بدون أن يلاحظ أحد.
  • متوافق مع .npmrc: يقرأ bun install تكوين سجل npm من .npmrc الخاص بـ npm، لذا يمكنك استخدام نفس التكوين لكل من npm و Bun.
  • روابط صلبة: على Windows و Linux، يستخدم bun install روابط صلبة لتوفير مساحة القرص وأوقات التثبيت.
bash
# يحتاج فقط إلى أمر واحد للترحيل
bun i

# لإضافة تبعيات:
bun i @types/bun

# لإضافة تبعيات التطوير:
bun i -d @types/bun

# لإزالة تبعية:
bun rm @types/bun

تشغيل نصوص package.json بشكل أسرع

قم بتشغيل النصوص من package.json، والتنفيذيات من node_modules/.bin (مثل npx)، وملفات JavaScript/TypeScript (مثل node) - كل ذلك من أمر بسيط واحد.

NPMBun
npm run <script>bun <script>
npm exec <bin>bun <bin>
node <file>bun <file>
npx <package>bunx <package>

عندما تستخدم bun run <executable>، سيختار التنفيذ المثبت محليًا

sh
# تشغيل نص package.json:
bun my-script
bun run my-script

# تشغيل تنفيذي في node_modules/.bin:
bun my-executable # مثل tsc أو esbuild أو غير ذلك
bun run my-executable

# تشغيل ملف JavaScript/TypeScript:
bun ./index.ts

مساحات العمل؟ نعم.

bun install يدعم مساحات العمل بشكل مشابه لـ npm، مع ميزات أكثر.

في package.json، يمكنك تعيين "workspaces" إلى مصفوفة من المسارات النسبية.

json
{
  "name": "my-app",
  "workspaces": ["packages/*", "apps/*"]
}

تصفية النصوص حسب اسم مساحة العمل

في Bun، يقبل العلم --filter نمط glob، وسيقوم بتشغيل الأمر بشكل متزامن لجميع حزم مساحة العمل التي يتطابق name الخاص بها مع النمط، مع احترام ترتيب التبعيات.

sh
bun --filter 'lib-*' my-script
# بدلاً من:
# npm run --workspace lib-foo --workspace lib-bar my-script

تحديث التبعيات

لتحديث تبعية، يمكنك استخدام bun update <package>. سيحدث هذا التبعية إلى أحدث إصدار يلبي نطاق semver المحدد في package.json.

sh
# تحديث تبعية واحدة
bun update @types/bun

# تحديث جميع التبعيات
bun update

# تجاهل semver، التحديث إلى أحدث إصدار
bun update @types/bun --latest

# تحديث تبعية إلى إصدار معين
bun update @types/bun@1.3.3

# تحديث جميع التبعيات إلى أحدث الإصدارات
bun update --latest

عرض التبعيات القديمة

لعرض التبعيات القديمة، قم بتشغيل bun outdated. هذا مثل npm outdated لكن مع إخراج أكثر إحكاما.

sh
bun outdated
txt
┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ Package                                │ Current │ Update │ Latest │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/bun (dev)                       │ 1.1.6   │ 1.1.10 │ 1.1.10 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/react (dev)                     │ 18.3.3  │ 18.3.8 │ 18.3.8 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/eslint-plugin (dev) │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/parser (dev)        │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @vscode/debugadapter (dev)             │ 1.66.0  │ 1.67.0 │ 1.67.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ esbuild (dev)                          │ 0.21.5  │ 0.21.5 │ 0.24.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ eslint (dev)                           │ 9.7.0   │ 9.11.0 │ 9.11.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ mitata (dev)                           │ 0.1.11  │ 0.1.14 │ 1.0.2  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ prettier-plugin-organize-imports (dev) │ 4.0.0   │ 4.1.0  │ 4.1.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ source-map-js (dev)                    │ 1.2.0   │ 1.2.1  │ 1.2.1  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ typescript (dev)                       │ 5.5.3   │ 5.6.2  │ 5.6.2  │
└────────────────────────────────────────┴─────────┴────────┴────────┘

سرد الحزم المثبتة

لسرد الحزم المثبتة، يمكنك استخدام bun pm ls. سيسرد هذا جميع الحزم المثبتة في مجلد node_modules باستخدام ملف قفل Bun كمصدر للحقيقة. يمكنك تمرير العلم -a لسرد جميع الحزم المثبتة، بما في ذلك التبعيات العابرة.

sh
# سرد الحزم المثبتة على المستوى الأعلى:
bun pm ls
txt
my-pkg node_modules (781)
├── @types/node@20.16.5
├── @types/react@18.3.8
├── @types/react-dom@18.3.0
├── eslint@8.57.1
├── eslint-config-next@14.2.8
...
sh
# سرد جميع الحزم المثبتة:
bun pm ls -a
txt
my-pkg node_modules
├── @alloc/quick-lru@5.2.0
├── @isaacs/cliui@8.0.2
│   └── strip-ansi@7.1.0
│       └── ansi-regex@6.1.0
├── @jridgewell/gen-mapping@0.3.5
├── @jridgewell/resolve-uri@3.1.2
...

إنشاء tarball حزمة

لإنشاء tarball حزمة، يمكنك استخدام bun pm pack. سينشئ هذا tarball للحزمة في الدليل الحالي.

sh
# إنشاء tarball
bun pm pack
txt
Total files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KB

Shebang

إذا كانت الحزمة تشير إلى node في shebang #!/usr/bin/env node، فسيحترم bun run ذلك افتراضيًا ويستخدم التنفيذ node الخاص بالنظام. يمكنك إجباره على استخدام node الخاص بـ Bun عن طريق تمرير --bun إلى bun run.

عندما تمرر --bun إلى bun run، ننشئ رابطًا رمزيًا للتنفيذ Bun المثبت محليًا باسم "node" في دليل مؤقت ونضيفه إلى PATH الخاص بك لمدة تنفيذ النص.

sh
# فرض استخدام وقت تشغيل Bun بدلاً من node
bun --bun my-script

# هذا يعمل أيضًا:
bun run --bun my-script

التثبيتات العامة

يمكنك تثبيت الحزم عالميًا باستخدام bun i -g <package>. سيثبت هذا في مجلد .bun/install/global/node_modules داخل دليلك الرئيسي افتراضيًا.

sh
# تثبيت حزمة عالميًا
bun i -g eslint

# تشغيل حزمة مثبتة عالميًا بدون البادئة `bun run`
eslint --init

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