نواة Discourse تتجه لاستخدام pnpm لإدارة حزم JS

سنقوم بتبديل مدير حزم 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 "..."

لحل هذه المشكلة، يجب عليك:

  1. تشغيل npm install -g pnpm

  2. تشغيل pnpm install

  3. استبدال أي استخدامات لـ yarn ... في بيئة التطوير الخاصة بك بـ pnpm ...

الإضافات / السمات

لقد قمنا بتبديل الإضافات / السمات الرسمية الخاصة بنا لاستخدام pnpm لتبعيات التدقيق الخاصة بها.

بالنسبة لـ discourse_theme CLI، ستحتاج إلى تحديث إصدارك المحلي عن طريق تشغيل gem update discourse_theme.

العودة إلى yarn

إذا كنت بحاجة إلى العودة إلى إصدار يعتمد على yarn من Discourse (على سبيل المثال، التطوير على الفرع المستقر)، فستحتاج إلى حذف جميع مجلدات node_modules الأساسية يدويًا:

rm -rf node_modules app/assets/javascripts/*/node_modules
24 إعجابًا

يمكن الإبلاغ عن تجربة سلسة وخالية من العيوب في التطوير، تعمل من المرة الأولى، شكرًا جزيلاً! :rocket:

7 إعجابات

إذا كنت تستضيف الخدمة ذاتيًا. هل سنحتاج إلى القيام بأي شيء إذا لم نستخدم مكونات إضافية ومكونات مخصصة؟

على سبيل المثال، بعض المكونات الإضافية والمكونات ليست رسمية.

3 إعجابات

بافتراض أنك تستخدم التثبيت القياسي الخاص بنا، فلن تحتاج إلى القيام بأي شيء. لا يلزم إجراء أي تغييرات على الإضافات أو السمات

5 إعجابات

هل يجب أن نغير هذا الإصدار المتوقع إلى، ربما:

please-use-pnpm-see-https://meta.discourse.org/t/324521

:smiley:

6 إعجابات

أنا أساهم في مشروع FOSS آخر حيث تم تقديمي مؤخرًا لأول مرة إلى PNPM. كان الانتقال لا يحتاج إلى تفكير، وسلسًا، وفعالًا، ومتعة حقيقية.

لقد كتبت ملاحظات موجزة جدًا في وثائق هذا المشروع حول ماهية PNPM وكيفية استخدامه. بينما تختلف التفاصيل الصغيرة لكل مشروع، آمل أن يكون ما هو موجود هناك بمثابة مقدمة سريعة لأي شخص هنا، مثلي، لم يكن لديه أي فكرة قبل الإعلان.

5 إعجابات

مصدر جيد، شكراً @TonyG

تجدر الإشارة إلى أن أياً من “ملاحظات التكوين” هناك ليست مطلوبة لـ Discourse. لست متأكداً لماذا يحتاجونها… ربما لأنها تطبيق يعتمد على ويندوز؟

أيضاً، ملاحظتهم حول “في مشروع موجود، فقط احذف مجلد ‘node_modules’” تتم معالجتها تلقائياً في Discourse بواسطة هذا السكربت :sunglasses:

لذلك بالنسبة لنا، يجب أن يكون الأمر بسيطاً حقاً مثل:

npm install -g pnpm
pnpm install
إعجاب واحد (1)

سؤال واحد هنا يا ديفيد:

كيف يمكن تشغيل الـ linting محليًا؟

أي ما الذي يحل محل، على سبيل المثال: yarn prettier --write plugins/discourse-events

لقد حاولت تشغيل

pnpm pprettier --write plugins/discourse-events

لكنه يرمي خطأ:

Error: File not found with singular glob: /Users/blah/dev/disc/discourse/plugins/discourse-events (if this was purposeful, use allowEmpty option)

أعتقد أن لديك الكثير من p هناك؟

إذن تريد:

pnpm prettier --write plugins/discourse-events

pprettier هي أداة لتشغيل prettier بالتوازي، لكنني أفترض أنها لا تدعم التشغيل على دليل واحد بهذه الطريقة.

3 إعجابات

شكراً لمساهمتك في وثائق FOSS يا @david :lol_: يبدو أن الصفحة موجهة نحو Windows، وأن المعلومات هناك قد تكون معرفة مطلوبة لاستخدام pnpm. سأقوم بتحرير وتوضيح أن أياً من الأمرين ليس صحيحاً بالنسبة لهذه الأداة.

لتوضيح الأمر، فإن المعلومات حول كيفية عمل pnpm موجودة فقط لراحة المستخدم/المطور، بما في ذلك أولئك الذين قد يرغبون في فهم هذه الأداة الجديدة التي تحل محل أداة مهمة ومستخدمة بشكل متكرر في مجموعتنا.

بالنسبة لمطوري Discourse، توضح تلك المعلومات مكان الأشياء وكيفية تغيير المواقع الافتراضية. هذا يهدف إلى الإجابة على سؤال مثل “إذا كانت جميع وحدات node_modules الخاصة بي الآن في مكان واحد، فأين هي؟” في حاوية Discourse، قد لا يرغب مطورو البرامج في أن تكون الحزم في الموقع الافتراضي. إذا، لأي سبب من الأسباب، كان مطور المكون الإضافي يشير مباشرة إلى مجلد node_modules ووجد روابط لموقع آخر بدلاً من الملفات، فإن المعلومات الموجودة في تلك الصفحة تشرح بإيجاز كيف يتم تحديد هذا الموقع.

هذا كل ما في الأمر لمحاولة الإيجاز. :facepalm: :lolsob:

على أي حال، خطوة جيدة نحو pnpm، وشكراً لك.

إعجابَين (2)

نعم، pprettier لم يكن مناسبًا، شكرًا لك.
لقد قمت أيضًا بحل مشكلتي النهائية.
يبدو أنك بحاجة إلى تشغيل pnpm install في دليل المكون الإضافي قبل أن تتمكن من تشغيل فحوصات التنقية (حتى من دليل discourse).

إعجابَين (2)

هممم مثير للاهتمام :thinking:

مع هيكل المكون الإضافي القياسي الخاص بنا، يحتوي كل مكون إضافي على ملف package.json الخاص به مع تبعيات التدقيق الخاصة به. ولحد الآن، لا يزال الهيكل يستخدم yarn.

لذلك، لتدقيق مكون إضافي معين، ستنتقل إلى دليل المكون الإضافي وتشغل

yarn install
yarn prettier --write

يمكن أن يعمل استخدام تكوين التدقيق الأساسي للمكونات الإضافية في بعض الأحيان. ولكن إذا اختلف الإصدار/التكوين، فقد يكون الأمر مؤلمًا لأن إصدار eslint/prettier في الأساس لن يتطابق مع الإصدار الذي يعمل في نظام CI الخاص بالمكون الإضافي الخاص بك.

إعجاب واحد (1)

هل سنفكر في استخدام pnpm من دليل المكون الإضافي أيضًا؟

أعتقد أنه لا يزال يستخدم package.json المحلي، أليس كذلك؟

3 إعجابات

نعم بالتأكيد سنفعل! فقط دع الغبار يستقر على التغيير الأساسي قبل أن نبدأ تلك المغامرة

(حقيقة ممتعة: تحتفظ CDCK بحوالي 600 مستودع سمات/مكونات إضافية والتي ستحتاج جميعها إلى تحديث :sweat_smile:)

إعجابَين (2)

بالتأكيد، لا توجد مشاكل!

إعجاب واحد (1)

يبدو أن هذا قد نجح بشكل صحيح، ولكنه كان مربكًا بسبب إشعار يبدو أنه ينص على أنه يجب القيام بذلك يدويًا وليس تلقائيًا للمواقع ذات التثبيت القياسي:

إعجابَين (2)

شكراً @Architect. ستؤدي طلبات السحب هذه إلى كتم رسائل الترقية:

6 إعجابات

واجهت مشكلة في الترقية عبر أداة الويب — صفحة الترقية قالت إن الترقية فشلت، مع الخطأ Expected version "please-use-pnpm"، ولكن عندما زرت صفحة الإصدارات مرة أخرى لاحقًا، بدا أن الترقية نجحت:

… ولكن الآن لا تعمل أي من صفحات المسؤول:

تحديث:
لقد قمت بإعادة بناء من سطر الأوامر وهذا أصلح الأمور.

3 إعجابات

شكراً للإبلاغ يا @alxndr.

لقد دفعت للتو هذا الإصلاح والذي يجب أن يمنع حدوث ذلك للآخرين.

4 إعجابات

ربما تكون بيئة Communiteq الخاصة بنا، ولكن بصراحة، لا أرى أي تحسينات كبيرة في السرعة أثناء التثبيت؟ حتى أن تثبيت الاختبار المستقر لدينا يتم تثبيته بشكل أسرع بـ 23 ثانية من التثبيت الذي تم اجتيازه للاختبارات.

إعجاب واحد (1)