Skip to content

يتم تخزين جميع الحزم التي تم تنزيلها من السجل في ذاكرة تخزين مؤقتة عامة في ~/.bun/install/cache، أو المسار المحدد بواسطة متغير البيئة BUN_INSTALL_CACHE_DIR. يتم تخزينها في أدلة فرعية مسماة مثل ${name}@${version}، لذا يمكن تخزين إصدارات متعددة من الحزمة في الذاكرة المؤقتة.

تكوين سلوك الذاكرة المؤقتة

toml
[install.cache]
# الدليل المراد استخدامه للذاكرة المؤقتة
dir = "~/.bun/install/cache"

# عندما تكون true، لا تحمل من الذاكرة المؤقتة العامة.
# قد يكتب Bun لا يزال إلى node_modules/.cache
disable = false

# عندما تكون true، قم دائمًا بحل أحدث الإصدارات من السجل
disableManifest = false

تقليل إعادة التنزيل

يسعى Bun لتجنب إعادة تنزيل الحزم عدة مرات. عند تثبيت حزمة، إذا كانت الذاكرة المؤقتة تحتوي بالفعل على إصدار في النطاق المحدد بواسطة package.json، فسيستخدم Bun الحزمة المخزنة مؤقتًا بدلاً من تنزيلها مرة أخرى.

تفاصيل التثبيت

إذا كان إصدار semver يحتوي على لاحقة إصدار مسبق (1.0.0-beta.0) أو لاحقة بناء (1.0.0+20220101)، يتم استبدالها بتجزئة من تلك القيمة بدلاً من ذلك، لتقليل فرص الأخطاء المرتبطة بمسارات الملفات الطويلة.

عندما يوجد مجلد node_modules، قبل التثبيت، يتحقق Bun من أن node_modules يحتوي على جميع الحزم المتوقعة مع الإصدارات المناسبة. إذا كان كذلك يكتمل bun install. يستخدم Bun محلل JSON مخصص يتوقف عن التحليل بمجرد العثور على "name" و "version".

إذا كانت الحزمة مفقودة أو لديها إصدار غير متوافق مع package.json، يتحقق Bun من وجود وحدة متوافقة في الذاكرة المؤقتة. إذا تم العثور عليها، يتم تثبيتها في node_modules. وإلا، سيتم تنزيل الحزمة من السجل ثم تثبيتها.


النسخ السريع

بمجرد تنزيل حزمة إلى الذاكرة المؤقتة، لا يزال Bun بحاجة إلى نسخ تلك الملفات إلى node_modules. يستخدم Bun أسرع syscalls المتاحة لأداء هذه المهمة. على Linux، يستخدم روابط صلبة؛ على macOS، يستخدم clonefile.


توفير مساحة القرص

نظرًا لأن Bun يستخدم روابط صلبة لـ "نسخ" وحدة إلى مجلد node_modules الخاص بالمشروع على Linux و Windows، فإن محتويات الحزمة توجد فقط في موقع واحد على القرص، مما يقلل بشكل كبير من مقدار مساحة القرص المخصصة لـ node_modules.

تنطبق هذه الفائدة أيضًا على macOS، ولكن هناك استثناءات. يستخدم clonefile وهو نسخ عند الكتابة، مما يعني أنه لن يشغل مساحة قرص، لكنه سيحسب ضمن حد القرص. هذا السلوك مفيد إذا حاول شيء ما تصحيح node_modules/*، لذا فمن المستحيل التأثير على التثبيتات الأخرى.

استراتيجيات التثبيت

يمكن تكوين هذا السلوك باستخدام العلامة --backend، والتي تحترمها جميع أوامر إدارة الحزم في Bun.

  • hardlink: الافتراضي على Linux و Windows.
  • clonefile: الافتراضي على macOS.
  • clonefile_each_dir: مشابه لـ clonefile، باستثناء أنه ينسخ كل ملف بشكل فردي لكل دليل. متاح فقط على macOS ويميل إلى الأداء الأبطأ من clonefile.
  • copyfile: الاحتياط المستخدم عند فشل أي مما سبق. إنه أبطأ خيار. على macOS، يستخدم fcopyfile()؛ على Linux يستخدم copy_file_range().
  • symlink: يستخدم حاليًا فقط لتبعيات file: (وفي النهاية link:). لمنع الحلقات اللانهائية، يتخطى ربط مجلد node_modules.

إذا قمت بالتثبيت باستخدام --backend=symlink، فلن يحل Node.js مجلدات node_modules للتبعيات ما لم يكن لكل تبعية مجلد node_modules الخاص بها أو تمرر --preserve-symlinks إلى node. راجع توثيق Node.js حول --preserve-symlinks.

bash
bun install --backend symlink
node --preserve-symlinks ./foo.js

لا يعرض وقت تشغيل Bun حاليًا ما يعادل --preserve-symlinks.

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