
Andrew Hanna

Andrew Hanna

الإجابة المختصرة: حل الاعتماديات بين الحزم هو الطريقة التي تحدد بها
سيلزفورس أي الحزم يجب أن تكون موجودة مسبقا، وبأي إصدارات، قبل أن تُثبَّت حزمة أخرى أو
تُرقّى. تعلن عن ذلك في مصفوفة dependencies داخل
sfdx-project.json، مرتبة بترتيب التثبيت. لو ضبطت الترتيب والحدود الدنيا
للإصدارات صارت ترقيات المشتركين مملة بالمعنى الجيد. ولو أخطأت فيها انتهت مؤسسة عميل
إلى إصدار لا تستطيع مغادرته.
تنشأ الاعتمادية بمجرد أن تشير metadata في حزمة إلى metadata في حزمة أخرى: Flow على كائن مُدار، أو صنف Apex يرث صنفا أساسيا، أو field set على حقل يخص غيرك. والنتيجة العملية شرط مسبق: يجب تثبيت الحزمة المشار إليها أولا، بإصدار لا يقل حداثة عن الإصدار الذي بنيت عليه، وإلا فشل التثبيت.
داخل مدخل package directory في sfdx-project.json، بإحدى صيغتين:
{ "package": "[email protected]" }
{ "package": "MyPackage", "versionNumber": "1.0.0.RELEASED" }
وثلاث قواعد تزن أكثر من الصياغة نفسها.
"calculateTransitiveDependencies": true لتعلن عن الاعتماديات
المباشرة فقط بينما تُحسَب غير المباشرة نيابة عنك. وبدونه ستضطر لسرد كل مستوى بيدك
إلى ما لا نهاية.
هذا يقيّد البنية، فافحصه قبل أن ترسمها.
وجود حزمة أساس 1GP تحت امتداد 2GP هو أكثر تصميم اعتمادي شيوعا يُضطر الفريق إلى التراجع عنه متأخرا، وهو مكلف عند تلك النقطة. اقرأ التركيبات المدعومة قبل أول بناء لا بعده.
RELEASED فتتبع آخر إصدار أطلقته، وهو أمر
مريح أثناء التطوير ومفاجئ داخل بناء إصدار.
SubscriberPackageVersion يخبرك بما
هو مثبت في تلك المؤسسة وبأي إصدار، وهذا أفضل من قراءة صفحة Installed Packages
والتمني.
ولو لم تستطع سرد هذا الترتيب لمنتجك أنت من الذاكرة، فلن يستطيعه فريق الدعم عندك في اللحظة التي يتعطل فيها عميل.
التسلسل الذي ينجح عند تغيّر حزمة الأساس: أصدر نسخة الأساس، ثم انقل المشتركين إليها عبر نسخة موصى بها أو push upgrade، ثم أصدر الحزمة التابعة التي تشترطها. وعكس هاتين الخطوتين ينتج ترقية تفشل عند شرط مسبق داخل مؤسسة لا تراها ولا تستطيع إصلاحها من عندك.
sfdx-project.json في كل تشغيلة لخط التسليم، وأفشل
البناء عند اكتشاف دائرة.
Serpent يوفر حل الاعتماديات بين الحزم، ومسارات 1GP و2GP والحزم المُدارة، وإدارة النسخ عبر مؤسسات المشتركين في كل الخطط بما فيها المجانية. تجد أدلة تعبئة أخرى في مكتبة SF Guides عندنا.
هل يمكن لحزمة 2GP مُدارة أن تعتمد على حزمة 1GP مُدارة؟
ليس افتراضيا. سيلزفورس تمنع هذه التركيبة، ويُطلب الاستثناء الفردي عبر فتح حالة لدى دعم الشركاء في سيلزفورس.
هل يلزمني سرد الاعتماديات غير المباشرة؟
فقط إذا أردت. تفعيل "calculateTransitiveDependencies": true يجعلك تعلن عن
الاعتماديات المباشرة وتُحسب غير المباشرة تلقائيا. وبدونه لا بد من سرد كل مستوى يدويا.
ماذا يحدث لو اعتمدت حزمتان على بعضهما؟
لا شيء جيد، لأن الاعتماديات الدائرية غير مدعومة. استخرج الـ metadata المشتركة إلى حزمة أدنى تعتمد عليها الحزمتان.
أي حزمة أرقّيها أولا داخل مؤسسة المشترك؟
الأبعد إلى أسفل في الرسم البياني. الاعتماديات تسبق الحزم التي تحتاجها، وبنفس ترتيب التثبيت.
لماذا تفشل ترقية عميلي برسالة خطأ في الاعتماديات؟
غالبا بسبب الحد الأدنى للإصدار. حزمة الأساس المثبتة أقدم مما يشترطه إصدارك الجديد، فرقِّ حزمة الأساس أولا ثم أعد المحاولة.
بدون التزام.