سنقوم بتبديل مدير حزم JavaScript الأساسي لـ Discourse من ‘yarn classic’ إلى pnpm. سيؤدي هذا إلى تحسينات كبيرة في سرعة التثبيت ومتطلبات التخزين.
الإنتاج
إذا كنت تستخدم استضافة مُدارة أو تثبيتًا قياسيًا، فلن تحتاج إلى القيام بأي شيء. سيتم تطبيق التغيير تلقائيًا عند التحديث التالي.
إذا كانت لديك بيئة إنتاج مخصصة، فستحتاج إلى تغيير أي أوامر yarn ... إلى pnpm ...
التطوير
بعد سحب أحدث إصدار من Discourse الأساسي، قد ترى خطأً مثل هذا عند بدء تشغيل الخادم:
pnpm is not installed
أو، إذا قمت بتشغيل أمر مثل yarn install، فسترى
error discourse@: The engine "yarn" is incompatible with this module. Expected version "please-use-pnpm". Got "..."
لحل هذه المشكلة، يجب عليك:
تشغيل npm install -g pnpm
تشغيل pnpm install
استبدال أي استخدامات لـ yarn ... في بيئة التطوير الخاصة بك بـ pnpm ...
الإضافات / السمات
لقد قمنا بتبديل الإضافات / السمات الرسمية الخاصة بنا لاستخدام pnpm لتبعيات التدقيق الخاصة بها.
بالنسبة لـ discourse_theme CLI، ستحتاج إلى تحديث إصدارك المحلي عن طريق تشغيل gem update discourse_theme.
العودة إلى yarn
إذا كنت بحاجة إلى العودة إلى إصدار يعتمد على yarn من Discourse (على سبيل المثال، التطوير على الفرع المستقر)، فستحتاج إلى حذف جميع مجلدات node_modules الأساسية يدويًا:
أنا أساهم في مشروع FOSS آخر حيث تم تقديمي مؤخرًا لأول مرة إلى PNPM. كان الانتقال لا يحتاج إلى تفكير، وسلسًا، وفعالًا، ومتعة حقيقية.
لقد كتبت ملاحظات موجزة جدًا في وثائق هذا المشروع حول ماهية PNPM وكيفية استخدامه. بينما تختلف التفاصيل الصغيرة لكل مشروع، آمل أن يكون ما هو موجود هناك بمثابة مقدمة سريعة لأي شخص هنا، مثلي، لم يكن لديه أي فكرة قبل الإعلان.
شكراً لمساهمتك في وثائق FOSS يا @david يبدو أن الصفحة موجهة نحو Windows، وأن المعلومات هناك قد تكون معرفة مطلوبة لاستخدام pnpm. سأقوم بتحرير وتوضيح أن أياً من الأمرين ليس صحيحاً بالنسبة لهذه الأداة.
لتوضيح الأمر، فإن المعلومات حول كيفية عمل pnpm موجودة فقط لراحة المستخدم/المطور، بما في ذلك أولئك الذين قد يرغبون في فهم هذه الأداة الجديدة التي تحل محل أداة مهمة ومستخدمة بشكل متكرر في مجموعتنا.
بالنسبة لمطوري Discourse، توضح تلك المعلومات مكان الأشياء وكيفية تغيير المواقع الافتراضية. هذا يهدف إلى الإجابة على سؤال مثل “إذا كانت جميع وحدات node_modules الخاصة بي الآن في مكان واحد، فأين هي؟” في حاوية Discourse، قد لا يرغب مطورو البرامج في أن تكون الحزم في الموقع الافتراضي. إذا، لأي سبب من الأسباب، كان مطور المكون الإضافي يشير مباشرة إلى مجلد node_modules ووجد روابط لموقع آخر بدلاً من الملفات، فإن المعلومات الموجودة في تلك الصفحة تشرح بإيجاز كيف يتم تحديد هذا الموقع.
نعم، pprettier لم يكن مناسبًا، شكرًا لك.
لقد قمت أيضًا بحل مشكلتي النهائية.
يبدو أنك بحاجة إلى تشغيل pnpm install في دليل المكون الإضافي قبل أن تتمكن من تشغيل فحوصات التنقية (حتى من دليل discourse).
مع هيكل المكون الإضافي القياسي الخاص بنا، يحتوي كل مكون إضافي على ملف package.json الخاص به مع تبعيات التدقيق الخاصة به. ولحد الآن، لا يزال الهيكل يستخدم yarn.
لذلك، لتدقيق مكون إضافي معين، ستنتقل إلى دليل المكون الإضافي وتشغل
yarn install
yarn prettier --write
يمكن أن يعمل استخدام تكوين التدقيق الأساسي للمكونات الإضافية في بعض الأحيان. ولكن إذا اختلف الإصدار/التكوين، فقد يكون الأمر مؤلمًا لأن إصدار eslint/prettier في الأساس لن يتطابق مع الإصدار الذي يعمل في نظام CI الخاص بالمكون الإضافي الخاص بك.
واجهت مشكلة في الترقية عبر أداة الويب — صفحة الترقية قالت إن الترقية فشلت، مع الخطأ Expected version "please-use-pnpm"، ولكن عندما زرت صفحة الإصدارات مرة أخرى لاحقًا، بدا أن الترقية نجحت:
ربما تكون بيئة Communiteq الخاصة بنا، ولكن بصراحة، لا أرى أي تحسينات كبيرة في السرعة أثناء التثبيت؟ حتى أن تثبيت الاختبار المستقر لدينا يتم تثبيته بشكل أسرع بـ 23 ثانية من التثبيت الذي تم اجتيازه للاختبارات.