اذهب إلى المحتوى

السؤال

نشر

مرحبًا فريق أكاديمية حسوب،

أعمل حاليًا على تطوير إطار عمل Backend خاص بي باسم RiserBob باستخدام Bun وTypeScript، وأواجه مشكلة أثناء تثبيت الاعتماديات باستخدام Bun، وأحتاج مساعدتكم في تشخيصها وحلها.

وصف المشكلة:

عند تنفيذ الأمر bun install داخل التطبيق التجريبي الذي تم إنشاؤه باستخدام مولّد المشاريع الخاص بالإطار، يفشل تثبيت الحزمة riser-bob بخطأ EPERM، بينما يعمل npm install دون هذه المشكلة.

مجلد المشروع الذي تظهر فيه المشكلة:

C:\Users\Nokta.byte\OneDrive\Desktop\RiserBob\projects\create-riser-bob\test-app

وتحديدًا أثناء تثبيت الحزمة داخل:

C:\Users\Nokta.byte\OneDrive\Desktop\RiserBob\projects\create-riser-bob\test-app\node_modules\riser-bob

بيئة التطوير:

نظام التشغيل: Windows

Bun: الإصدار 1.4.3

مسار المشروع يحتوي على مجلد OneDrive.

المشروع يستخدم حزمة محلية باسم riser-bob ضمن مستودع يحتوي على حزم ومشاريع متعددة.

رسالة الخطأ كاملة:

bun install v1.4.3 (c6da4a4d3) 📦 Installing [97/106] Clean lockfile: 107 packages - 107 packages in 561.3us warn: CreateHardLinkW failed, falling back to CopyFileW: \\?\C:\Users\Nokta.byte\OneDrive\Desktop\RiserBob\projects\riser-bob\.github\ISSUE_TEMPLATE\bug_report.md - \\?\C:\Users\Nokta.byte\OneDrive\Desktop\RiserBob\projects\create-riser-bob\test-app\node_modules\riser-bob\.github\ISSUE_TEMPLATE\bug_report.md EPERM: failed copying files from cache to destination for package riser-bob 99 packages installed [7.07s] Failed to install 1 package

ما أحتاج إلى معرفته:

ما السبب المحتمل لفشل Bun في نسخ ملفات الحزمة المحلية riser-bob على Windows، رغم نجاح npm install؟

هل المشكلة ناتجة عن إعدادات الحزمة package.json، أو إعدادات files في الحزمة، أو الـ cache، أو صلاحيات الملفات، أو تعامل Bun مع الروابط الصلبة والنسخ الاحتياطي باستخدام CopyFileW؟

كيف يمكن تحديد السبب الحقيقي بخطوات تشخيص واضحة؟

ما الحل الصحيح الذي يضمن أن المستخدم يستطيع إنشاء مشروع جديد باستخدام مولّد RiserBob وتثبيت الاعتماديات بنجاح؟

هل تنصحون باستبعاد ملفات غير ضرورية مثل .github من الحزمة المنشورة عبر npm، أم أن ذلك مجرد تحسين ولا يعالج السبب الأساسي؟

أفضّل حلًا جذريًا يحافظ على توافق المشروع مع Bun وnpm، بدل الاكتفاء بحذف مجلد node_modules أو تغيير صلاحيات الملفات دون معرفة السبب.

شكرًا لكم مقدمًا.

RiserBob.zip

Recommended Posts

  • 0
نشر

انقل المشروع إلى مسار خارج مجلد OneDrive مثلاً: C:\Dev\RiserBob وجرب:

bun install

لتفادي تعارض الـ Hardlinks وقفل الملفات اللحظي أثناء البناء والتثبيت السريع.

ثم افتح PowerShell كمسؤول Run as Administrator في مسار test-app الحالي وجرب:

bun install --force

ثم تعديل مولد المشاريع بحيث يعتمد على رقم إصدار الحزمة من npm (^1.0.0) عند إنشاء المشاريع للمستخدمين.

واعتماد Bun Workspaces (workspace:*) في التطوير المحلي والـ Monorepo بدلاً من المسارات النسبية file:../../.

  • 0
نشر

انقل المشروع خارج OneDrive 

mkdir C:\dev
xcopy "C:\Users\Nokta.byte\OneDrive\Desktop\RiserBob" C:\dev\RiserBob /E /I /H

بعد التأكد من نجاح النسخ، اعمل من C:\dev\RiserBob فقط، وأوقف العمل على النسخة الأصلية ثم نظف وأعد التثبيت 

cd C:\dev\RiserBob\projects\create-riser-bob\test-app
rmdir /s /q node_modules
del bun.lock
bun pm cache rm
bun install

إذا نجح التثبيت، فقد تأكد أن السبب هو OneDrive، وانتهت مشكلتك الشخصية إن استمر الفشل، جرب backend بديلًا 

bun install --backend=copyfile

لجعله دائمًا، أضف في ملف bunfig.toml داخل المشروع 

[install]
backend = "copyfile"

ثم نظف الحزمة riser-bob (للمستخدمين النهائيين) في projects/riser-bob/package.json أضف قائمة بيضاء 

{
  "files": [
    "dist",
    "README.md",
    "LICENSE"
  ]
}

ثم تحقق مما سينشر فعليًا 

cd C:\dev\RiserBob\projects\riser-bob
npm pack --dry-run

يجب ألا يظهر .github ولا ملفات الاختبار ولا node_modules ثم اجعل المولّد يعتمد على إصدار منشور لا على مسار محلي في قالب package.json الذي يولّده create-riser-bob، استخدم

"dependencies": {
  "riser-bob": "^0.1.0"
}

وليس

file:../... أو link

هذا يضمن أن المستخدم يثبّت من tarball نظيف عبر npm registry، وهو المسار الذي لا يتأثر بمشكلة النسخ من المجلد المصدر ثم أثناء التطوير المحلي فقط، استخدم 

cd projects\riser-bob
bun link
cd ..\create-riser-bob\test-app
bun link riser-bob

ثم أضف حماية داخل المولّد، عند إنشاء المشروع، اكتشف OneDrive في المسار وحذّر المستخدم 

if (process.cwd().toLowerCase().includes("onedrive")) {
  console.warn(
    "المشروع داخل OneDrive وقد يسبب أخطاء EPERM مع bun install.\n" +
    "انقله خارج OneDrive أو استخدم: bun install --backend=copyfile"
  );
}

ثم اختبر كأنك مستخدم جديد، من مجلد نظيف خارج المستودع 

cd C:\dev
bun create riser-bob my-new-app
cd my-new-app
bun install
bun run dev

وكرر الاختبار نفسه بـ npm install للتأكد من التوافق مع الأداتين.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...