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روابط صلبة لتوفير مساحة القرص وأوقات التثبيت.
# يحتاج فقط إلى أمر واحد للترحيل
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) - كل ذلك من أمر بسيط واحد.
| NPM | Bun |
|---|---|
npm run <script> | bun <script> |
npm exec <bin> | bun <bin> |
node <file> | bun <file> |
npx <package> | bunx <package> |
عندما تستخدم bun run <executable>، سيختار التنفيذ المثبت محليًا
# تشغيل نص 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" إلى مصفوفة من المسارات النسبية.
{
"name": "my-app",
"workspaces": ["packages/*", "apps/*"]
}تصفية النصوص حسب اسم مساحة العمل
في Bun، يقبل العلم --filter نمط glob، وسيقوم بتشغيل الأمر بشكل متزامن لجميع حزم مساحة العمل التي يتطابق name الخاص بها مع النمط، مع احترام ترتيب التبعيات.
bun --filter 'lib-*' my-script
# بدلاً من:
# npm run --workspace lib-foo --workspace lib-bar my-scriptتحديث التبعيات
لتحديث تبعية، يمكنك استخدام bun update <package>. سيحدث هذا التبعية إلى أحدث إصدار يلبي نطاق semver المحدد في package.json.
# تحديث تبعية واحدة
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 لكن مع إخراج أكثر إحكاما.
bun outdated┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ 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 لسرد جميع الحزم المثبتة، بما في ذلك التبعيات العابرة.
# سرد الحزم المثبتة على المستوى الأعلى:
bun pm lsmy-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
...# سرد جميع الحزم المثبتة:
bun pm ls -amy-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 للحزمة في الدليل الحالي.
# إنشاء tarball
bun pm packTotal files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KBShebang
إذا كانت الحزمة تشير إلى node في shebang #!/usr/bin/env node، فسيحترم bun run ذلك افتراضيًا ويستخدم التنفيذ node الخاص بالنظام. يمكنك إجباره على استخدام node الخاص بـ Bun عن طريق تمرير --bun إلى bun run.
عندما تمرر --bun إلى bun run، ننشئ رابطًا رمزيًا للتنفيذ Bun المثبت محليًا باسم "node" في دليل مؤقت ونضيفه إلى PATH الخاص بك لمدة تنفيذ النص.
# فرض استخدام وقت تشغيل Bun بدلاً من node
bun --bun my-script
# هذا يعمل أيضًا:
bun run --bun my-scriptالتثبيتات العامة
يمكنك تثبيت الحزم عالميًا باستخدام bun i -g <package>. سيثبت هذا في مجلد .bun/install/global/node_modules داخل دليلك الرئيسي افتراضيًا.
# تثبيت حزمة عالميًا
bun i -g eslint
# تشغيل حزمة مثبتة عالميًا بدون البادئة `bun run`
eslint --init