توفير بديل أكثر أمانًا لـ composer global require
.
تم استخدام Cgr في بيئات العالم الحقيقي لعدة سنوات حتى الآن؛ ومع ذلك، راجع قائمة انتظار المشكلات و"القيود" أدناه.
يعد أمر Composer global require
أسلوب تثبيت موصى به للعديد من أدوات سطر أوامر PHP؛ ومع ذلك، فإن المستخدمين الذين يقومون بتثبيت الأدوات بهذه الطريقة يخاطرون بمواجهة حالات فشل التثبيت الناتجة عن تعارض التبعية بين المشاريع المختلفة. يتصرف البرنامج النصي cgr بشكل مشابه لـ composer global require
، باستخدام composer require
لتثبيت نسخة عامة لكل مستخدم من أداة سطر الأوامر، ولكن في موقع معزول لن يواجه تعارضات في التبعية مع الأدوات الأخرى المثبتة عالميًا.
البرنامج النصي cgr لا علاقة له بالأمان؛ فهو لم يعد أو أقل أمانًا من التثبيت عبر Composer Global الذي يتطلبه الأمر.
يوصي Composer نفسه بأن composer global require
كأمر "ملائم" لتثبيت أدوات سطر الأوامر. لسوء الحظ، تتعارض هذه التوصية مع الافتراض الأساسي للملحن، وهو أنه يجب إدارة تبعيات كل مشروع بشكل مستقل. يقوم الأمر Composer global
بإنشاء مشروع "عام" واحد؛ سيتم تثبيت جميع المشاريع المثبتة عبر composer global require
في هذا الموقع، وسيتم دمج جميع تبعياتها. وهذا يعني أنه يمكن أن تنشأ تعارضات بين مشروعين مستقلين لم يتم تصميمهما مطلقًا للعمل معًا، وليس هناك حاجة لدمج تبعياتهما في أداة تحميل تلقائية واحدة. عندما ينشأ هذا النوع من الحالات، غالبًا ما يكون من الصعب جدًا على المبتدئين تشخيصها.
تمت تسمية هذا البرنامج النصي، المسمى cgr
، على اسم "composer global require"، وهو أمر Composer الذي يحاكيه. فهو يوفر آلية بديلة لتثبيت أدوات سطر أوامر PHP على مستوى العالم والتي تعادل وظيفيًا (تقريبًا) الأمر الموجود، ولكنها أكثر أمانًا. سيقوم البرنامج النصي Cgr بإنشاء دليل منفصل لكل مشروع مثبت؛ افتراضيًا، موقع التثبيت هو ~/.composer/global/org/project
. سيتم تثبيت أي نصوص برمجية ثنائية مدرجة في ملف Composer.json الخاص بالمشروع المثبت في دليل Composer bin القياسي، ~/.composer/vendor/bin
.
نظرًا لأن البرنامج النصي cgr لا يحتوي على تبعيات خاصة به، فمن الآمن تثبيته عبر أمر Composer global require
:
composer global require consolidation/cgr
إذا لم تكن قد قمت بذلك بالفعل، فستحتاج أيضًا إلى إضافة vendor/bin
من دليل Composer الرئيسي إلى $PATH الخاص بك. بعد ذلك، يمكنك استبدال cgr
بأي أداة سطر أوامر توصي تعليمات تثبيتها باستخدام Composer global require
.
لإضافة دليل bin الصحيح إلى PATH الخاص بك:
PATH="$(composer config -g home)/vendor/bin:$PATH"
مثال:
cgr drush/drush
على عكس الأمر Composer Global require، من الممكن استخدام cgr لتعيين الحد الأدنى من الاستقرار للمشروع قبل تثبيته. يتم ذلك بنفس طريقة الأمر composer create-project
:
cgr --stability RC pantheon-systems/terminus 1.0.0-alpha2
يمكن تخصيص سلوك البرنامج النصي cgr باستخدام خيارات سطر الأوامر ومتغيرات البيئة.
خيار | متغير البيئة | وصف |
---|---|---|
--مسار الملحن | CGR_COMPOSER_PATH | المسار إلى ثنائي الملحن. |
--base-dir | CGR_BASE_DIR | مكان تخزين المشاريع "العالمية". |
--بن دير | CGR_BIN_DIR | مكان تثبيت ثنائيات المشروع. |
إذا لم يتم تعريف هذه المتغيرات، فسيستخدم cgr قيمة متغير البيئة COMPOSER_HOME
كدليل أساسي لاستخدامه كما هو موضح في وثائق Composer حول متغيرات البيئة.
لتكوين cgr لتثبيت الثنائيات على ~/bin، أضف ما يلي إلى ملف ~/.bashrc الخاص بك:
export CGR_BIN_DIR=$HOME/bin
يمكنك تحديد أي دليل تريده لـ CGR_BIN_DIR
، طالما أنه موجود في $PATH الخاص بك.
لعرض معلومات المشروع، قم بتشغيل:
cgr info drush/drush
لعرض معلومات كافة المشاريع المثبتة عبر 'cgr'، قم بتشغيل:
cgr info
لتحديث مشروع قمت بتثبيته باستخدام cgr
، قم بتشغيل:
cgr update drush/drush
لتحديث كل شيء تم تثبيته بواسطة cgr
، قم بتشغيل:
cgr update
لإزالة مشروع:
cgr remove drush/drush
لتحديث أو إزالة cgr نفسه، قم بتشغيل composer global update consolidation/cgr
أو composer global remove cgr
. لاحظ أن إزالة cgr ليس لها أي تأثير على الأوامر التي قمت بتثبيتها باستخدام cgr؛ وستظل مثبتة وفعالة.
إذا وجدت أن cgr
لا يزال يتصرف مثل أمر Composer global require
القياسي، فتحقق جيدًا من إعدادات متغير PATH $، واستخدم which cgr
والاسم alias cgr
لتحديد ما إذا كان هذا البرنامج النصي قد تم تحديده بواسطة Shell أم لا. من الممكن أن يتعارض cgr مع بعض الأدوات الأخرى؛ على سبيل المثال، يحدد مشروع oh-my-zsh اسمًا مستعارًا لـ cgr. إذا كانت هذه مشكلة بالنسبة لك، فإما unalias cgr
، أو ربما أضف alias cgrx="$HOME/.composer/vendor/bin/cgr"
لتشغيل هذه الأداة التجريبية كـ cgrx
.
سيقوم Composer أيضًا بتحميل مكونات Composer الإضافية من مشروع Composer "العالمي". وهذا أمر نادر. ومع ذلك، إذا كنت ترغب في تثبيت Composer Installer على مستوى العالم، فيجب عليك استخدام الأمر composer global require
مباشرةً. يقوم البرنامج النصي cgr بعزل المشاريع التي يقوم بتثبيتها عن بعضها البعض لتجنب التعارضات المحتملة بين التبعيات؛ يؤدي هذا العزل أيضًا إلى جعل أي مكونات إضافية للملحن غير متاحة في السياق العالمي.
يحافظ البرنامج النصي cgr على سهولة إدارة موقع التثبيت العام تلقائيًا نيابةً عنك؛ ومع ذلك، إذا لم يكن ذلك مرغوبًا، فيمكنك ببساطة تشغيل أوامر مشابهة لما يلي:
COMPOSER_BIN_DIR=$HOME/bin composer require org/project:~1.0
إذا سلكت هذا الطريق، فستحتاج إلى إعداد موقع التثبيت يدويًا باستخدام mkdir
و cd
حسب الضرورة قبل تشغيل composer require
. لا يمكنك ببساطة تعيين COMPOSER_BIN_DIR عالميًا، لأن القيام بذلك سيؤدي إلى تثبيت الثنائيات من المشاريع المحلية في دليل bin العام الخاص بك، وهو ما لن يكون مرغوبًا فيه بالطبع.
في البرنامج النصي للتكامل المستمر، تكون البنية التالية مفيدة:
/usr/bin/env COMPOSER_BIN_DIR=$HOME/bin composer --working-dir=$HOME/project require org/project:~1.0
قم بتغيير دليل التثبيت ( $HOME/project
) ليتوافق مع المشروع الذي يتم تثبيته، بحيث يتم تثبيت كل مشروع في موقعه المنفصل.
يوفر ملحق Composer bamarni/composer-bin-plugin طريقة مشابهة لإدارة التثبيت المعزول للأدوات الثنائية من خلال تحديد مواقع تثبيت منفصلة مسماة. وهذا يوفر طريقة ملائمة لتثبيت مشاريع متعددة معًا (على سبيل المثال، تثبيت Robo مع المشاريع الخارجية التي توفر مهام Robo إضافية في مشروع "robo").
ومن المأمول أن تكون هذه الأداة حلاً مؤقتًا، حتى تجعل التغييرات في Composer غير ضرورية. راجع مشكلة الملحن للحصول على التحديثات.