جهات الاتصال

ما هو الملحن وكيفية استخدامه. تثبيت Composer for dummies (التخصيص والأوامر الأساسية). كيفية إنشاء مشروع جديد في الملحن

) هو مدير تبعية جديد نسبيًا وشائع بالفعل لـ PHP. يمكنك وصف المكتبات التي يعتمد عليها مشروعك وسيقوم Composer بتثبيت المكتبات اللازمة لك! علاوة على ذلك ، لا يعد Composer مدير حزم بالمعنى الكلاسيكي. نعم ، إنه يعمل مع كيانات ، والتي سنسميها "الحزم" أو المكتبات ، لكنها مثبتة داخل كل مشروع على حدة ، وليس على الصعيد العالمي (هذا هو أحد الاختلافات الرئيسية عن PEAR القديم الجيد).

كيف يعمل باختصار:

  1. لديك مشروع يعتمد على عدة مكتبات.
  2. تعتمد بعض هذه المكتبات على مكتبات أخرى.
  3. أنت تصف في مشروعك تلك المكتبات التي تعتمد عليها شفرتك بشكل مباشر.
  4. يعثر Composer على الإصدارات الصحيحة من المكتبات المطلوبة للمشروع بأكمله ، ويقوم بتنزيلها وتثبيتها في مجلد مشروعك.
عند إنشاء Composer ، استمد المؤلفون الأفكار والإلهام من مشاريع مماثلة: npm لـ Node.js و Bundler for Ruby.

تم تصميمه وتطويره في الأصل من قبل شخصين Nils Adermann و Jordi Boggiano ، والآن يوجد أكثر من عشرين مساهمًا في المشروع. تمت كتابة المشروع في PHP 5.3 ، ويتم توزيعه بموجب ترخيص MIT وهو متاح على github.

تم تنفيذ الالتزامات الأولى في أبريل 2011 ، وأصبح الملحن حاليًا في مرحلة "alpha3". ومع ذلك ، فهو مستقر بالفعل ويستخدمه العديد من مشاريع PHP الشائعة (على سبيل المثال ، سيمفوني 2). يمكن العثور على قائمة بالمشاريع التي تستخدم Composer على packagist.org - هذا هو مستودع حزم Composer الرسمي. بالمناسبة ، في المؤتمر الأخير Devconf 2012 ، ذكر مطور إطار عمل Yii في خطابه أن Yii2على الأرجح سيستخدم Composer أيضًا.

في هذه المقالة ، سأصف بإيجاز الميزات الرئيسية لـ Composer وسنحاول إنشاء مشروع تجريبي باستخدام Composer لتحميل المكتبات المطلوبة. ستكون جميع الأمثلة متاحة على github.com و bitbucket.org.

ما الذي يمكن أن يفعله الملحن؟

  • تنزيل الحزم وتبعياتها ؛
  • افتراضيًا ، يتم تنزيل الحزم من مستودع packagist.org الرسمي. يمكن لأي شخص إضافة حزمته هناك بحرية لجعل تركيبها سهلاً ومريحًا قدر الإمكان للعالم بأسره ؛
  • يمكن تنزيل الحزم ليس فقط من packagist.org ، ولكن أيضًا من أي مستودع git أو mercurial أو svn ؛
  • عند تنزيل الحزم من github.com أو bitbucket.org ، لا يلزم وجود نظام للتحكم في الإصدار (git أو hg) ، يعمل Composer من خلال واجهة برمجة التطبيقات الخاصة بهذه المواقع ؛
  • يمكن وضع مستودع git / hg / svn مع الحزمة ليس فقط في أحد المواقع المذكورة أعلاه ، ولكن في أي مكان آخر ، على سبيل المثال ، في شبكه محليهمؤسسة أو بشكل عام على محرك أقراص ثابت محلي ؛
  • بالإضافة إلى ذلك ، لا يجب أن تكون المكتبة المثبتة في شكل حزمة Composer ، يمكنك التثبيت من أي مستودع git / hg / svn لأي بنية ؛
  • أخيرًا ، لا يجب أن تكون الحزمة المراد تثبيتها مستودع git / hg / svn ، بل يمكن أن يكون ملفًا مضغوطًا عشوائيًا يمكن الوصول إليه بواسطة أي uri!
  • يتم تثبيت جميع الحزم في الدليل الحالي (حيث تم تنفيذ أمر التثبيت) ، وهذا يسمح لك بالحصول على عدة إصدارات مختلفة من المكتبات عند العمل في مشاريع مختلفة بالتوازي ؛
  • يقوم أمر التحديث بتحديث جميع الحزم المثبتة (أو يعيد تثبيت الحزم التي تمت إزالتها عن طريق الخطأ) إلى أحدث الإصدارات. أو قد لا يتم تحديث الإصدارات إلى الأحدث ، إذا قمت بإنشاء ملف composer.lock خاص - وهذا يسمح لك بإصلاح مجموعة من الإصدارات الثابتة لجميع المكتبات المستخدمة في المشروع ؛
  • بعد تثبيت الحزم ، يتم إنشاء autoload.php تلقائيًا ، والتي يمكنك من خلالها توصيل المكتبات المثبتة في كود مشروعك. عند إعداد حزمة Composer ، يوصى باستخدام PSR-0 - المعيار القياسي لتحديد موقع ملفات php وتسميتها حتى يتمكن التحميل التلقائي من العثور عليها بسهولة. على أي حال ، يمكن لمؤلف الحزمة أن يصف القواعد التي سيبحث بها التحميل التلقائي عن ملفات فئات أو مساحات أسماء معينة. إذا كنت تقوم بتثبيت مكتبة غير مؤطرة كحزمة Composer (على سبيل المثال ، مستودع git عشوائي من github) ، فإن مهمة وصف قواعد التحميل التلقائي تقع على عاتقك. لذلك لا يوجد سحر مع autoload.php الذي تم إنشاؤه - يمكنه تحميل كل شيء (حتى المكتبات التي تحتوي على مجموعة من الوظائف خارج الفصول الدراسية) ، الشيء الرئيسي هو أن القواعد موصوفة (بواسطة مؤلف المكتبة أو بواسطتك).

مثال عملي: استخدام Composer في مشروعنا

لمعرفة كيفية استخدام Composer ، دعنا نكتب مشروعًا صغيرًا في PHP: "Super Hello World." نظرًا لأننا لا نريد إعادة اختراع العجلة وكتابة التعليمات البرمجية من البداية ، فلنأخذ مكتبات وأطر عمل جاهزة.

سوف نستخدم المكتبات التالية:

  1. إطار سيليكس مصغر
  2. محرك قالب الغصين (متوفر كحزمة مؤلف على packagist.org) ،
  3. مسجل زيارات SuperLogger الخاص بنا ، والذي صممته كحزمة Composer ونشرته على github
  4. مكتبة superlib القديمة القديمة ولكن المحبوبة لدينا ، والتي تتكون من خليط من الطبقات بدون مساحات أسماء ووظائف بدون فئات ؛ تم نشر المكتبة على github ولكنها ليست حزمة Composer مصممة
كما فعلنا من قبل: قم بتنزيل الأطر والمكتبات التي نحتاجها ، وفكرنا في مكان فك حزمها ، وكتبنا مجموعة من المتطلبات (أو تتطلب الموثوقية) في المشروع.

كيف سنفعل ذلك الآن: نستخدم Composer - سيقوم بتنزيل جميع المكتبات وإنشاء autoload.php لنا. بالإضافة إلى ذلك ، إذا أردنا عرض "Super Hello World" للزملاء ، فسيكون ذلك كافيًا لنشر كود مشروعنا على github (أو في أي مكان آخر) ، دون تضمين جميع المكتبات المطلوبة في المستودع ودون إعداد تعليمات طويلة حول كيفية تثبيتها. سيكون كافيًا لزملائنا تنزيل (استنساخ) "Super Hello World" وتنفيذ الأمر
php composer.phar install
يتم توزيع الملحن كملف واحد الملحن(phar هو أرشيف php) - في الواقع هو برنامج نصي PHP يمكنه قبول عدة أوامر (تثبيت ، تحديث ، ...) ويمكنه تنزيل المكتبات وفك ضغطها.

بالمناسبة ، القليل عن صيغة الإطلاق.
إذا كنت تعمل تحت Windows ، فمن المرجح أنك ستكتب شيئًا مثل
php C: \ path \ to \ composer.phar install
يمكنك جعل حياتك أسهل عن طريق إنشاء composer.bat ووضعه في٪ PATH٪.

في نظامي Linux و OS X ، يمكنك تكوين أمر مثل
تثبيت الملحن

الملحن json
لذلك ، نحن على استعداد لكتابة مشروع Super Hello World الخاص بنا. وقد كتبته للتو: http://github.com/pqr/superhelloworld. يتكون الكود من ملف index.php واحد في دليل الويب ومن قالب layout.twig في دليل العروض.

رأس كل شيء ملف الملحن json... يجب أن يكون في جذر المشروع ، في حالتنا بجوار الويب وعرض الدلائل. من الضروري في هذا الملف تحديد المكتبات التي يعتمد عليها مشروعنا. بالإضافة إلى ذلك ، إذا لم تكن هذه المكتبات عبارة عن حزم Composer منسقة ، فأنت بحاجة إلى تحديد بعضها معلومة اضافيةحول المكتبة التي يتم تثبيتها (على سبيل المثال ، صِف قواعد التحميل التلقائي للفئات والوظائف لـ autoload.php).

لقد خمنت أن Composer.json موجود بتنسيق بيانات JSON. للسؤال " لماذا بالضبط JSON؟"مطورو الملحن يجيبون" لان. مجرد قبوله.".

نحتاج إلى وصف كائن js واحد يحتوي على جميع التعليمات. الأول والأكثر التعليمات الرئيسية: يتطلب.

نقوم بتوصيل الحزم من موقع packagist.org
("تتطلب": ("php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev" } }
لقد وصفت هنا اعتماد المشروع على إصدار PHP 5.3.0 والإصدارات الأحدث ، silex (microframework) و twig (محرك النموذج). يتوفر Silex و Twig كحزم Composer على packagist.org ، لذلك لا يلزم تكوين إضافي. لاحظ أن Silex ، بدورها ، تعتمد على عدة حزم أخرى - سيتم تنزيلها جميعًا وتثبيتها تلقائيًا.

يتكون اسم الحزمة من جزأين مفصولين بشرطة مائلة: اسم المورد(اسم البائع) و اسم المكتبة... غالبًا ما يكون اسم المورد هو لقب المؤلف أو اسم الشركة. في بعض الأحيان ، يكون اسم الموفر هو نفسه اسم المكتبة أو إطار العمل نفسه.

لكل حزمة ، تأكد من تضمين رقم الإصدار. يمكن أن يكون فرعًا في المستودع ، على سبيل المثال ، "dev-master" - تشير بادئة dev إلى أن هذا هو اسم الفرع ، وأن الفرع نفسه يسمى "master" ، على التوالي. بالنسبة للمستودع الزئبقي ، سيبدو الإدخال المشابه مثل "dev-default". يمكنك أيضًا تحديد قواعد أكثر تعقيدًا كرقم الإصدار باستخدام عوامل المقارنة. بالمناسبة ، إذا قمت بتنزيل رمز من مستودع بعيد ، فسيقوم Composer بفحص العلامات وأسماء الفروع في هذا المستودع بحثًا عن شيء مشابه لأرقام الإصدارات ، على سبيل المثال ، سيتم استخدام العلامة "v1.2.3" كمؤشر للإصدار 1.2 .3.

نتصل بحزمة Compsoer الخاصة بنا
بعد ذلك ، دعنا ندرج حزمة SuperLogger الخاصة بنا ، والتي تم تنسيقها بشكل صحيح ، ولكن لم يتم نشرها على packagist.org ، ولكن على github:
("تتطلب": ("php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev", "mycompany/superlogger":"dev-master" }, "repositories":[ { "type":"git", "url":"http://github.com/pqr/superlogger" } ] }
للسماح لـ Composer بمعرفة مكان البحث عن حزمة "mycompany / superlogger" ، أضفنا مصفوفة مستودعاتمع ارتباط إلى مستودع جيثب المقابل. لاحظ أن الإدخالات في مصفوفة المستودعات لا ترتبط ارتباطًا مباشرًا بالكتلة المطلوبة - لا توجد مراسلات بين الحزم والمستودعات. بقدر ما أفهم ، يبحث Composer عن جميع الحزم المطلوبة في جميع المستودعات المحددة (بما في ذلك على موقع packagist.org) ويقوم بتنزيل المطابقات التي تم العثور عليها وفقًا لبعض الأولويات الداخلية. بشكل أعمق ، لم أفهم هذه اللحظة بعد ، صححني إذا كان أحد يعرف التفاصيل.
ربط مستودع git التعسفي
الآن دعنا ندرج مكتبة Superlib القديمة الخاصة بنا ، والتي توجد على github ، ولكنها ليست حزمة Composer مزينة ، منذ ذلك الحين هي قديمة جدا.
("تتطلب" :( "php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev", "mycompany/superlogger":"dev-master", "pqr/superlib":"1.2.3" }, "repositories":[ { "type":"git", "url":"http://github.com/pqr/superlogger" }, { "type":"package", "package":{ "name":"pqr/superlib", "version":"1.2.3", "source":{ "type":"git", "url":"http://github.com/pqr/superlib", "reference":"master" }, "autoload":{ "classmap":["timer.php"], "files":["lib_functions.php"] } } } ] }
تمت إضافة كائن إلى مصفوفة المستودعات التي تصف حزمة pqr / superlib بالكامل. في الواقع ، هذا هو الوصف الذي يجب على مؤلف المكتبة أن يصنعه ويضعه داخل مستودع التخزين الخاص به. ولكن وفقًا لشروط المشكلة ، فإن superlib ليست حزمة Composer مزينة ، لذلك كان علينا إنشاء وصفها كجزء من مشروع Super Hello World. وبالمثل ، يمكنك توصيل أي مكتبة أخرى ، بما في ذلك. ملف مضغوط بسيط.
نقوم بتوصيل ملف مضغوط بسيط
على سبيل المثال ، إليك كيف يمكن أن يبدو وصف التبعية على محرك قوالب Smarty ، الموزع كملف مضغوط مع مصادر في svn ، كما يلي:
("المستودعات": [("type": "package"، "package" :( "name": "smarty / smarty"، "version": "3.1.7"، "dist" :( "url": " http://www.smarty.net/files/Smarty-3.1.7.zip "،" type ":" zip ")،" source ":(" url ":" http: //smarty-php.googlecode. com / svn / "،" type ":" svn "،" reference ":" tags / Smarty_3_1_7 / Distribution / ")))]،" تتطلب ":(" smarty / smarty ":" 3.1. * "))
تعليمات التحميل التلقائي
دعنا نعود إلى مشروعنا.
وصف "pqr / superlib" ، أضفنا التعليمات تحميل تلقائى... يحتوي على ملف timer.php ، حيث سيبحث برنامج التحميل التلقائي المستقبلي عن الفئات ويحدد ملفًا بوظائف lib_functions.php - سيتم إدراجه بالقوة في بداية autoload.php.

لذا فإن مشروعنا يتكون من:

  • في الجذر هو ملف composer.json ؛
  • في الجذر هي الويب وأدلة المشاهدات ؛
  • يوجد داخل دليل الويب ملف بـ "منطق الأعمال" لتطبيقنا: index.php؛
  • داخل دليل views هو ملف قالب layout.twig ؛
  • بالإضافة إلى ذلك ، أضع في مجلد الويب .htaccess (لـ apache) و web.config (لـ IIS 7.5) بقواعد mod_rewrite / url لكتابة النصوص - ليس لديهم أي علاقة بتكوين Composer.
كل شيء جاهز للانطلاق.
شغّل تثبيت الملحن
php composer.phar install
يستنسخ الملحن المستودعات ويفككها بالنسخة المرغوبة في دليل بائعالذي خلقه بنفسه في جذر المشروع. بعد التفريغ ، سنجد في دليل البائع:
  • ملف autoload.php
  • دلائل الخدمة. composer والملحن
  • بثرة - حزمة تم سحبها مع إطار Silex المصغر
  • silex هو الإطار المصغر نفسه ، وقد طلبناه صراحة عند وصف التبعيات
  • symfony - بعض المكونات من Symfony 2 المطلوبة لعمل Silex
  • غصين هو محرك قوالب طلبناه أيضًا صراحة
  • mycompany - داخل هذا الدليل ، سيكون هناك مستودع superlogger يتم تنزيله من github
  • pqr - داخل هذا الدليل ، سيكون هناك مستودع superlib ، يتم تنزيله أيضًا من github
كل ما تبقى هو تضمين autoload.php في بداية ملف web / index.php (يتطلب "../vendor/autoload.php") وستتوفر جميع المكتبات والوظائف!
كيف أقوم بإنشاء حزمة Composer الخاصة بي؟
في هذا المشروع ، استخدمنا Composer من منظور مستهلك المكتبة. كيف تنشئ حزمة Composer بنفسك بحيث يمكن لأي شخص آخر استخدامها؟

في الواقع ، لقد قمت بإنشاء إحدى هذه الحزم عندما كنت أقوم بإعداد الأمثلة لهذه المقالة. يوجد في جذر مستودع superlogger ملف composer.json لهيكل مماثل ، والذي يصف الحزمة نفسها وتبعياتها (في حالة superlogger ، لا توجد تبعيات). أمثلة أخرى: silex و twig repos ، والتي يتم تنزيلها إلى مجلد البائع - لديهم جميعًا ملف composer.json في الجذر - انظر ، ادرس!

وبالطبع ، لا تنس الوثائق الموجودة على الموقع الرسمي getcomposer.org/doc/.
سأترك هذا الموضوع لك للدراسة بمفردك.

دعونا نلخص

في هذا المقال ، شرحت ماهية الملحن وتاريخه ووصفت الملامح الرئيسية. حاولنا إنشاء مشروع يستخدم Composer لتثبيت الحزم من packagist.org ومن مستودعاتنا الخاصة.

حان الوقت لتجربته!

  1. تنزيل Composer (getcomposer.org/download/)
  2. تنزيل superhelloworld (git clone git: //github.com/pqr/superhelloworld.git)
  3. تثبيت التبعيات (cd superhelloworld && php composer.phar install)
  4. افحص مجلد البائع الذي يظهر و autoload.php الذي تم إنشاؤه
  5. استخدم الملحن في مشاريعك
  6. ربح !!!

زوجان من الروابط لإضافة

سلام. اليوم سنتحدث عنه من هم مديرو الحزم، والنظر في واحد منهم - ملحن.

أولاً ، دعنا نتعرف على الغرض منها مديري الحزم؟ يساعد مديرو الحزم على تنزيل جميع الحزم والتبعيات وبعض الأطر والمكونات الإضافية التي تستخدمها لغة البرمجة من خلال وحدة التحكم حرفيًا في سطرين. في حالتنا هذه ملحن- هذه مدير الحزم للغة البرمجة php.

لنوضح لك كيفية عمل الملحن ، دعنا ننزل yii الإطار

لذا اذهب إلى الموقع http://getcomposer.org/واضغط على الزر "ابدء"... الآن اضغط التثبيت - * لا شىءلتعيينه على ماكأو لينكس... افتح Terminal والصق الأوامر التالية:

1) $ curl -sS https://getcomposer.org/installer | بي أتش بي

2) $ mv composer.phar / usr / local / bin / composer

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

لتثبيت ملحنعلى ال شبابيك، اتبع هذا الرابط https://getcomposer.org/doc/00-intro.md#installation-windowsوتنزيل برنامج التثبيت. إذا كنت ستواجه أخطاء في المكتبة أثناء التثبيت ، فما عليك سوى الانتقال إلى الملف php.iniوتعطيل تلك المكتبات التي تمنع التثبيت مدير الحزم الملحن.

بعد، بعدما ملحنمثبتًا ، انتقل إلى سطح المكتب الخاص بك وقم بإنشاء مجلد يسمى "ملحن"... الآن في وحدة التحكم انتقل إليها

سطح مكتب / ملحن /

لتهيئة الملحن ، أدخل الأمر

الحرف الأول للملحن

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

دعنا نواصل تثبيت إطار العمل الخاص بنا. كما قلت ، ندخل

ابحث عن حزمة:

أدخل اسم إطار عملنا هنا

ابحث عن حزمة: yii

سترى أمامك جميع التطابقات التي وجدتها ملحن... حاجتنا yiisoft / yiiيوجد رقم على اليسار بين قوسين مربعين. في حالتي هو كذلك 0 ، اكتبه واضغط على Enter. بعد ذلك ، نحتاج إلى إدخال الإصدار. ومن أين يضخ الملحن كل هذا؟ يوجد موقع يتم فيه تخزين الكثير من جميع أنواع الأشياء - http://packagist.org/هناك دخول في شريط البحث yiiوانتقل إلى الرابط الأول ، هناك سترى أن الإصدار يسمى مدير التطوير... اكتب هذا في وحدة التحكم الخاصة بك واضغط على إدخال.

هل تحصر الجيل؟

فوق هذه التسمية التوضيحية ، يمكنك رؤية شكل الملف الملحن json... هذا هو بالضبط الملف الذي ستقدمه للموظف الجديد.

لذا ، كل شيء يناسبنا ، اضغط على مفتاح الإدخال.

الآن إذا ذهبت إلى مجلدنا على سطح المكتب الخاص بك ملحن، سترى أن لدينا jsonملف.

أدخل الآن الأمر في وحدة التحكم

تثبيت الملحن

بعد اكتمال التثبيت ، سيظهر مجلد جديد في المجلد الخاص بنا على سطح المكتب بالاسم بائعحيث يتم تخزين جميع ملفات إطار العمل الخاص بنا.

من السهل جدًا العمل معه مدير الحزم الملحن، والأهم من ذلك ، ليس عليك الآن تنزيل كل شيء يدويًا. يكفي أن تفعل ذلك مرة واحدة jsonملف ثم استخدمه فقط لتنزيل وتثبيت الأطر التي تحتاجها والمكونات الإضافية والمكتبات والمزيد.

Composer - مدير التبعية لـ PHP (Dependency Manager for PHP) أو مدير الحزم (التبعيات عبارة عن حزم - تكمل منطقيًا تطورات طرف ثالث أو تطورات خاصة مستخدمة في المشروع).

أفضل للتثبيت على مستوى العالم. بالنسبة إلى OSX ، في الجهاز ، أدخل

Curl -sS https://getcomposer.org/installer | php mv composer.phar / usr / local / bin / composer

ملحن

إذا كان كل شيء صحيحًا ، فسترى قائمة بالأوامر. لذلك يمكنك استخدام الملحن.

1. كيفية إنشاء مشروع جديد في الملحن؟

يخزن الملحن جميع التبعيات في ملف composer.json ، للسؤال "لماذا JSON؟" يجيب مطورو الملحن "لأن. فقط اقبله."

يمكنك إنشاء هذا الملف باستخدام الأمر

بداية الملحن (أو php composer.phar init)

سيرشدك الملحن خلال عدة خطوات - اسم المشروع ، الوصف ، الترخيص. الخطوة المهمة بالنسبة لك هي حيث يطلب منك الملحن تحديد الحزمة التي تريد تثبيتها. سيطالبك بالبحث عن الحزمة التي تكتب فيها ، على سبيل المثال ، "yii" ويقترح البحث جميع الحزم الخاصة بـ yii المتوفرة على packagist.org. سيؤدي اختيار ما تحتاجه إلى الملحن إلى إنشاء ملف composer.json في مجلد مشروعك ، مع كل التبعيات الموصوفة.

الآن يبقى فقط تثبيتها بالأمر:

تثبيت الملحن

كل شىء. الآن ظهر كل ما تريد تنزيله في مشروعك.

2. كيف تصنع مشروعًا من حزمة جاهزة عبر الملحن؟

يتم ذلك باستخدام الأمر create-project ("إنشاء مشروع جديد من حزمة إلى دليل معين.") في المجلد الذي تريد إنشاء مجلد المشروع فيه.

على سبيل المثال ، لنأخذ حزمة كعب روتين متقدمة لتطبيق yii2 (https://packagist.org/packages/yiisoft/yii2-app-advanced). لذلك تم تحميل هذه الحزمة على packagist.org.

الملحن إنشاء مشروع yiisoft / yii2-app-متقدم yii2advanced 2.0.0-beta

yii2advanced - حدد اسم مشروعك (مجلدات على الكمبيوتر)
الإصدار 2.0.0-beta (راجع الإصدارات المتوفرة على packagist.org)

بعد هذا الأمر ، يقوم الملحن بتنزيل الحزمة وتثبيت جميع التبعيات عليها (لا تحتاج إلى البحث في مواقع مختلفة عن الامتدادات الضرورية - يجدها الملحن بنفسه).

3. تحديث الحزمة.

فريق

(يحدّث تبعياتك إلى أحدث إصدار وفقًا لـ composer.json ، ويحدّث ملف composer.lock.) - يحدّث جميع الحزم المثبتة (أو يعيد تثبيت الحزم المحذوفة عن طريق الخطأ) إلى أحدث الإصدارات. أو قد لا يتم تحديث الإصدارات إلى الأحدث ، إذا قمت بإنشاء ملف composer.lock خاص - وهذا يسمح لك بإصلاح مجموعة من الإصدارات الثابتة لجميع المكتبات المستخدمة في المشروع ؛

في الشكل ، التحديث الخاص بي لا يحدث ، لأن جميع التبعيات محدثة.

أحدث Composer ثورة في إدارة الحزم في PHP وساعد المطورين في جميع أنحاء العالم على إنشاء تعليمات برمجية مشتركة وغير محددة الإطار. لكن مع ذلك ، يتخطى عدد قليل من الأشخاص أساسيات وظائفه ، لذا ستحاول هذه المقالة تسليط الضوء على بعض الأساليب المفيدة لاستخدامها.

التثبيت العالمي (عالمي)

على الرغم من توفر هذا الخيار في الوثائق ، يمكن تثبيت Composer (وفي معظم الحالات يجب) بشكل عام. التثبيت العالمي يعني أنه بدلاً من:

php composer.phar somecommand
يمكنك ببساطة الدخول في أي مشروع:

شيء ما الملحن
هذا يجعل من السهل جدًا إنشاء مشاريع جديدة (على سبيل المثال ، باستخدام الأمر إنشاء مشروع) في أي مكان على نظام الملفات الخاص بك.

لتثبيت Composer عالميًا ، اتبع هذه التعليمات.

تثبيت التبعيات بشكل صحيح

عند قراءة التعليمات التمهيدية أو ملفات README ، سيكتب لك الكثير شيئًا مثل:
ما عليك سوى إضافة ما يلي إلى composer.json الخاص بك ملف:
("تتطلب": ("myproject": "someversion"))

لكن هذا النهج له عدة عيوب. أولاً ، يمكن أن يؤدي النسخ واللصق البسيط إلى حدوث أخطاء. ثانيًا ، بالنسبة للمبتدئين ، قد لا يكون من الواضح مكان وضع هذا الرمز ، إذا كان لديه بالفعل ملف كبير الملحن jsonوسيؤدي هذا أيضًا إلى حدوث خطأ. أخيرًا ، سيستخدم بعض الأشخاص Composer لأول مرة ، وربما لأول مرة ، سطر الأوامر. لذلك ، من الممارسات الجيدة تغطية جميع أنواع الحالات التي قد يشعر فيها المبتدئون بعدم الأمان (هل لديهم محرر رسومات أم سيستخدمون سطر الأوامر؟ ؟ إجراء تحرير الملف؟ ماذا لو لم يكن ملف composer.json موجودًا بالفعل في المشروع؟ هل تصف أيضًا كيفية إنشاء ملف جديد؟).

أفضل طريقة لإضافة تبعية جديدة إلى ملف الملحن jsonهو استخدام الأمر يتطلب:

يتطلب الملحن حزمة ما / حزمة ما: نسخة ما
سيضيف هذا كل ما تحتاجه إلى ملف التبعية دون تدخل يدوي.

إذا كنت بحاجة إلى إضافة حزم إلى القسم تتطلب ديف، أضف الخيار إلى الأمر - ديف:

يتطلب الملحن phpunit / phpunit --dev
أيضا ، الأمر يتطلبيدعم إضافة حزم متعددة في نفس الوقت ، فقط افصل بينها بمسافة.

قفل الملفات

ملف الملحنيحتفظ بقائمة حالية من التبعيات المثبتة وإصداراتها. وبالتالي ، في الوقت الذي تم فيه تحديث إصدارات التبعيات بالفعل ، سيتلقى الأشخاص الآخرون الذين سيستنسخون مشروعك نفس الإصدارات. يعمل هذا على التأكد من أن كل شخص يتلقى مشروعك لديه "بيئة مجمعة" مماثلة لتلك التي استخدمتها أثناء التطوير ، ويساعد على تجنب الأخطاء التي قد تنشأ عن تحديثات الإصدار.

أيضا ، الملف الملحنيحتوي على تجزئة الملف الملحن jsonلذلك حتى إذا قمت للتو بتحديث مؤلف المشروع ، فستتلقى تحذيرًا بأن ملف القفل غير مطابق .jsonملف. في هذه الحالة ، سيساعد الأمر تحديث الملحن - lockوالذي لن يؤدي إلا إلى تحديث ملف القفل نفسه ، دون لمس أي شيء آخر.

الإصدار

تطابق تام ( 1.2.3 ) ، نطاقات مع عوامل المقارنة ( <1.2.3 ) ، مجموعات من هؤلاء المشغلين ( >1.2.3 <1.3 ) ، "آخر ما هو متاح" ( 1.2.* ) ، تلدة ( ~1.2.3 ) وعلامة الإقحام ( ^1.2.3 ).

يستحق المؤشران الأخيران شرحًا منفصلاً:

  • إشارة التلدة ( ~1.2.3 ) ستتضمن جميع الإصدارات السابقة لـ 1.3 (غير شامل) ، لأنه في الإصدار الدلالي ، هذه هي اللحظة لإدخال وظائف جديدة. في هذه الحالة ، سيتم الحصول على آخر نسخة ثانوية مستقرة. كما تقول الوثائق ، قد يتغير هذا المؤشر فقطالرقم الأخير من الإصدار.
  • تحديد علامة الإقحام ( ^1.2.3 ) تعني حرفياً "الخوف فقط من كسر التغييرات" وستتضمن إصدارات تصل إلى 2.0 ... بالنسبة لـ semver ، يعد تغيير الإصدار الرئيسي نقطة كسر في المشروع ، لذا فإن الإصدارات 1.3 , 1.4 و 1.9 مناسبا 2.0 - ليس اطول.
ما لم تكن تعلم أنك بحاجة إلى إصدار معين من الحزمة ، فإنني أوصيك باستخدام التنسيق دائمًا ~1.2.3 هو الخيار الأكثر أمانًا.

التكوين المحلي والعالمي

لم يتم تعيين قيم المعلمات الافتراضية في حجر. وصف مفصل لمعلمات التكوين الممكنة ( التكوين) انظر الرابط.

على سبيل المثال ، بتحديد:
("config": ("optimize-autoloader": true))
تقوم بإجبار Composer على تحسين classmap بعد كل تثبيت أو تحديث للحزمة (أو بعبارة أخرى ، عندما يتم إنشاء ملف فئة يتم تحميله تلقائيًا). هذا أبطأ قليلاً من إنشاء أداة التحميل التلقائي الافتراضية ، ويبطئ مع نمو المشروع.

معلمة أخرى مفيدة قد تكون ذاكرة التخزين المؤقت - الملفات - maxsize... في المشاريع الكبيرة (مثل eZ Publish أو Symfony) ، يمكن أن تمتلئ ذاكرة التخزين المؤقت بسرعة كبيرة. تتيح زيادة حجم ذاكرة التخزين المؤقت تشغيل Composer بشكل أسرع لفترة أطول.

يرجى ملاحظة أنه يمكن تعيين معلمات التكوين بشكل عام ، وفي هذه الحالة ستؤثر على جميع المشاريع (انظر التكوين). على سبيل المثال ، لتعيين معلمة حجم ذاكرة التخزين المؤقت بشكل عام ، تحتاج إما إلى تحرير الملف ~ / .composer / config.json، أو تنفيذ:

تكوين الملحن - Global cache-files-size "2048MiB"

التنميط والإخراج المطول

إذا قمت بإضافة المعلمة --الملف الشخصيإلى أي أمر عند استخدام Composer في سطر الأوامر ، فسيحتوي الإخراج على أكثر من النتيجة النهائية ، على سبيل المثال:

استخدام الذاكرة: 174.58 ميجا بايت (الذروة: 513.47 ميجا بايت) ، الوقت: 54.7 ثانية
ولكن أيضًا سيتم إضافة وقت تنفيذ الأمر وحجم الذاكرة المستخدمة إلى بداية كل سطر من الإخراج:

تثبيت الأصول لـ Sensio \ Bundle \ DistributionBundle في الويب / الحزم / sensiodistribution
أستخدم هذا الخيار لاكتشاف الحزم "البطيئة" ولمراقبة تحسين الأداء أو تدهوره.

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

مصادر مخصصة

إذا لم يكن مشروعك موجودًا بالفعل على Packagist ، فأحيانًا ما تحتاج فقط إلى تثبيت الحزمة من GitHub (على سبيل المثال ، إذا كانت الحزمة لا تزال قيد التطوير). للقيام بذلك ، راجع دليلنا.

عندما يكون لديك إنهإصدار الحزمة الشائعة التي يعتمد عليها مشروعك ، يمكنك استخدام مصادر مخصصة مع الاسم المستعار المضمّن لاستبدال الفرع الخاص بك بحزمة عامة ، مثل Matthieu Napoli.

تسريع الملحن

باستخدام التقنية الممتازة التي وصفها Mark Van Eijk ، يمكنك تسريع تنفيذ Composer من خلال استدعاؤه من خلال HHVM.

طريقة أخرى مع المعلمة - يفضل التوزيع، عند التثبيت ، سيقوم Composer بتنزيل إصدارات مستقرة ومضغوطة من المشروع ، بدلاً من الاستنساخ من نظام التحكم في الإصدار (وهو أبطأ بكثير). يتم استخدام هذه المعلمة بشكل افتراضي ، لذلك لا تحتاج إلى تمكينها في المشاريع المستقرة. إذا كنت بحاجة إلى تحميل المشروع من المصدر ، فاستخدم المعلمة - المصدر المفضل... يمكنك معرفة المزيد عن هذا في القسم ثبيت .

تصغير حجم مشروع الملحن

إذا كنت مطورًا لمشاريع "ملائمة للملحن" ، فإن هذا الجزء سوف يثير اهتمامك أيضًا. من منشور Reddit هذا ، يمكنك استخدام الملف .gitattributesتجاهل بعض الملفات والمجلدات أثناء تعبئة الحزمة للوضع - يفضل التوزيع.
/ docs export-ignore / الاختبارات export-ignore /.gitattributes export-ignore /.gitignore export-ignore /.travis.yml export-ignore /phpunit.xml export-ignore
كيف تعمل؟ عندما تقوم بتحميل مشروع إلى GitHub ، فإنه يجعل الرابط متاحًا تلقائيًا "تنزيل بتنسيق zip"، حيث يمكنك تنزيل أرشيف مشروعك. علاوة على ذلك ، يستخدم Packagist هذه المحفوظات التي تم إنشاؤها تلقائيًا لتنزيل التبعيات باستخدام الخيار - يفضل التوزيعوالتي يتم فك ضغطها بعد ذلك محليًا (أسرع بكثير من استنساخ ملفات مصدر المشروع). إذا أضفت إلى .gitattributesالاختبارات والتوثيق والملفات الأخرى التي لا تتعلق بمنطق المشروع ، فهذه المحفوظات لن تحتوي عليها ، وستصبح أسهل بكثير.

في نفس الوقت ، الناس الذين يريدتصحيح أخطاء مكتبتك أو إجراء اختبارات ، ستحتاج إلى تحديد المعلمة - المصدر المفضل.

تبنت PhpLeague هذا النهج وأدرجته في ملف "هيكل الحزمة"(هيكل الحزمة) ، لذا فإن أي مشروع يعتمد عليه سيكون تلقائيًا "ديست الودية".

تبين

إذا نسيت فجأة أي إصدار من PHP أو امتداداته التي تستخدمها ، أو كنت بحاجة إلى قائمة بجميع المشاريع المثبتة (مع وصف لكل منها) مع إصداراتها ، يمكنك استخدام الأمر تبينمع المعلمات --برنامج (-p) و --المثبتة (-أنا):

عرض الملحن - مثبت

عرض الملحن $ - إطار عمل BDD الموجه نحو السيناريو لـ PHP 5.3 behat / gherkin v4.3.0 محلل Gherkin DSL لـ PHP 5.3 behat / mink v1.5.0 إطار اختبار قبول الويب لـ PHP 5.3 behat / mink-browserkit - برنامج تشغيل Symfony2 BrowserKit لإطار Mink behat / mink-extension v2.0.1 Mink extension for Behat behat / mink-goutte-driver v1.0.9 Goutte driver for Mink framework behat / mink-sahi-driver v1.1.0 Sahi. JS driver for Mink framework behat / mink-selenium2-driver v1.1.1 Selenium2 (WebDriver) driver for Mink framework behat / sahi-client dev-master ce7bfa7 Sahi.js client for PHP 5.3 behat / symfony2-extension v2.0.0 امتداد إطار Symfony2 بالنسبة لـ Behat behat / transliterator v1.0.1 String Transliter Components / bootstrap 3.3.2 إطار العمل الأمامي الأكثر شيوعًا لتطوير المشاريع سريعة الاستجابة والمتحركة على الويب. المكونات / jquery 2.1.3 عقيدة مكتبة jQuery JavaScript / التعليقات التوضيحية v1.2.4 Docblock Annotations Parser عقيدة / ذاكرة التخزين المؤقت v1.4.1 توفر مكتبة التخزين المؤقت واجهة برمجة تطبيقات موجهة للكائنات للعديد من العقيدة / المجموعات الخلفية لذاكرة التخزين المؤقت v1.3.0 المجموعات عقيدة مكتبة تجريد المجموعات / الإصدار 2 المشترك. 5.0 العقيدة / dbal v2.5.1 عقيدة طبقة تجريد قاعدة البيانات / حزمة العقيدة v1.4.0 Symfony DoctrineBundle عقيدة / عقيدة-ذاكرة التخزين المؤقت-حزمة v1.0.1 حزمة Symfony2 لعقيدة ذاكرة التخزين المؤقت للعقيدة / inflector v1.0.1 معالجة السلاسل الشائعة باستخدام فيما يتعلق بقواعد الغلاف والمفرد / الجمع. العقيدة / المحقق 1.0.4 أداة مساعدة صغيرة وخفيفة الوزن لإنشاء مثيل للكائنات في PHP دون استدعاء عقيدة المنشئ / lexer v1.0.1 مكتبة أساسية لـ lexer يمكن استخدامها في موزعي النسب العودية من أعلى إلى أسفل. egulias / listeners-debug-command-bundle 1.9.1 أمر وحدة تحكم Symfony 2 لتصحيح أخطاء المستمعين ezsystems / behatbundle dev-master bd95e1b حزمة Behat للمساعدة في اختبار حزم eZ والمشاريع ezsystems / comments-bundle dev-master 8f95bc7 نظام التعليق لـ eZ Publish ezsystems / demobundle dev-master c13fb0b حزمة تجريبية لـ eZ Publish Platform ezsystems / demobundle-data v0.1.0 بيانات لـ ezsystems / demobundle ezsystems / ezpublish-kernel dev-master 3d6e48d eZ Publish API and kernel. هذا هو قلب eZ Publish 5.ezsystems / platform-ui-asset-bundle v0.5.0 تبعيات الأصول الخارجية لـ PlatformUIBundle ezsystems / platform-ui-bundle dev-master 4d0442d eZ Platform UI Bundle ezsystems / privacy-cookie-bundle v0. 1 حزمة تكامل لافتة ملفات تعريف الارتباط الخصوصية في eZ Publish / eZ Platform fabpot / goutte v1. 0.7 برنامج PHP Web Scraper friendsofsymfony / http-cache 1.3.1 أدوات لإدارة إبطال ذاكرة التخزين المؤقت friendsofsymfony / http-cache-bundle 1.2.1 تعيين رؤوس ذاكرة التخزين المؤقت HTTP المستندة إلى المسار وإرسال طلبات إلغاء الصلاحية إلى ذاكرة التخزين المؤقت لـ HTTP الخاصة بك guzzle / guzzle v3.9.3 PHP عميل HTTP. تم إهمال هذه المكتبة لصالح https://packagist.org/packages/guzzlehttp/guzzle hautelook / Templated-uri-bundle 2.0.0 Symfony2 Bundle التي توفر موجهًا متوافقًا مع RFC-6570 ومولد URL. hautelook / Templated-uri-router 2.0.1 موجه متوافق مع Symfony2 RFC-6570 ومولد URL تخيل / تخيل 0.6.2 معالجة الصور لـ PHP 5.3 incenteev / composer-parameter-handler v2.1.0 Composer script يتعامل مع ملف المعلمة الذي تم تجاهله instaclick / php -webdriver 1.0.17 PHP WebDriver for Selenium 2 jdorn / sql-formatter v1.2.17 a PHP SQL تسليط الضوء على مكتبة knplabs / knp-menu v1.1.2 مكتبة قائمة كائنية knplabs / knp-menu-bundle v1.1.2 توفر هذه الحزمة تكامل مكتبة KnpMenu kriswallsmith / assetic v1.2.1 إدارة الأصول لـ PHP kriswallsmith / buzz v0.13 Lightweight HTTP client league / flysystem 0.5.12 العديد من أنظمة الملفات وواجهة برمجة تطبيقات واحدة. حزمة liip / imagine-bundle 1.2.6 تساعد هذه الحزمة في تخيل التلاعب باستخدام مونولوج / مونولوج مكتبة التخيل 1.13.1 يرسل سجلاتك إلى الملفات والمآخذ وصناديق البريد الوارد وقواعد البيانات وخدمات الويب المختلفة nelmio / cors-bundle 1.3.3 يضيف CORS ( دعم رؤوس الموارد عبر المنشأ) في تطبيق Symfony2 الخاص بك ocramius / proxy-manager 0.5.2 مكتبة توفر أدوات مساعدة لإنشاء وإنشاء مثيل لها وتشغيلها بشكل عام مع Object Proxies oneup / flysystem-bundle v0.4.2 يدمج مكتبة تجريد نظام ملفات Flysystem مع Symfony2 مشروع. pagerfanta / pagerfanta v1.0.3 ترقيم الصفحات لـ PHP 5.3 phpdocumentor / reflection-docblock 2.0.4 phpspec / Prophecy v1.4.1 إطار عمل محاكاة ساخرة عالي الرأي لـ PHP 5.3+ phpunit / php-code-cover 2.0.16 مكتبة توفر التجميع والمعالجة و تقديم وظيفة لمعلومات تغطية كود PHP. phpunit / php-file-iterator 1.4.0 تطبيق FilterIterator الذي يقوم بتصفية الملفات بناءً على قائمة اللواحق. phpunit / php-text-template 1.2.0 محرك قالب بسيط. phpunit / php-timer 1.0.5 فئة الأداة المساعدة لتوقيت phpunit / php-token-stream 1.4.1 التفاف حول امتداد رمز PHP "s. phpunit / phpunit 4.6.4 إطار عمل اختبار وحدة PHP. phpunit / phpunit-mock-object 2.3 .1 مكتبة كائنات وهمية لـ PHPUnit psr / log 1.0.0 واجهة مشتركة لمكتبات التسجيل qafoo / rmf 1.0.0 إطار عمل VC بسيط جدًا مما يجعل من السهل إنشاء تطبيقات HTTP / خدمات الويب REST sebastian / المقارنة 1. 1.1 يوفر وظيفة لمقارنة قيم PHP للمساواة sebastian / diff 1.3.0 تنفيذ Diff sebastian / بيئة 1.2.2 يوفر وظائف للتعامل مع بيئات HHVM / PHP sebastian / مصدر 1.2.0 يوفر وظيفة لتصدير متغيرات PHP للتصور sebastian / global -state 1.0.0 لقطة من الحالة العالمية sebastian / recursion-Context 1.0.0 يوفر وظائف لمعالجة متغيرات PHP بشكل متكرر sebastian / version 1.0.5 Library التي تساعد في إدارة عدد إصدارات مشاريع PHP المستضافة على Git الاستشعار / التوزيع- الحزمة الأساسية v3 .0.21 الحزمة الأساسية لتوزيعات Symfony sensio / framework-extra-bundle v3.0.7 توفر هذه الحزمة طريقة لتكوين وحدات التحكم الخاصة بك باستخدام حزمة المولد / حزمة المولد v2.5.3. .0.2 مدقق أمان لـ composer.lock swiftmailer / swiftmailer v5.4.0 Swiftmailer ، بريد PHP مجاني غني بالميزات symfony-cmf / routing 1.3.0 يوسع مكون التوجيه Symfony2 ent للمسارات الديناميكية وتسلسل العديد من أجهزة التوجيه symfony / assetic-bundle v2.6.1 يدمج Assetic في Symfony2 symfony / monolog-bundle v2.7.1 Symfony MonologBundle symfony / swiftmailer-bundle v2.3.8 Symfony SwiftmailerBundle symfony / symfony v2.6.6 إطار عمل Symfony PHP tedivm / stash v0.12.3 المكان الذي تحفظ فيه ذاكرة التخزين المؤقت. tedivm / stash-bundle v0.4.2 يدمج مكتبة التخزين المؤقت Stash في Symfony. twig / extension v1.2.0 الميزات الإضافية الشائعة لـ Twig التي لا تنتمي مباشرة إلى Core twig / twig v1.18.1 Twig ، وهي لغة نموذج مرنة وسريعة وآمنة لـ PHP white-october / pagerfanta-bundle v1.0.2 حزمة للاستخدام Pagerfanta مع Symfony2 whiteoctober / breadcrumbs-bundle 1.0.2 حزمة فتات خبز صغيرة لـ Symfony2 zendframework / zend-code 2.2.10 توفر تسهيلات لإنشاء كود تعسفي باستخدام واجهة موجهة للكائن zendframework / zend-eventmanager 2.2.10 zendframework / zend-stdlib 2.2 .10 zetacomponents / base 1.9 توفر الحزمة الأساسية البنية التحتية الأساسية التي تعتمد عليها جميع الحزم. لذلك كل مكون يعتمد على هذه الحزمة. zetacomponents / feed 1.4 يتعامل هذا المكون مع تحليل وإنشاء خلاصات RSS1 و RSS2 و ATOM ، مع دعم وحدات التغذية المختلفة (DC ، المحتوى ، creativeCommons ، geo ، iTunes). المكونات zetacomponents / البريد 1.8.1 يسمح لك المكون بإنشاء و / أو تحليل رسائل البريد التي تتوافق مع معيار البريد. يدعم المرفقات والرسائل متعددة الأجزاء وبريد HTML. كما أنه يتفاعل مع SMTP لإرسال البريد أو IMAP ، P. .. zetacomponents / system-information 1.1 يوفر الوصول إلى متغيرات النظام الشائعة ، مثل نوع وحدة المعالجة المركزية وسرعتها ومقدار الذاكرة المتاح.

التدريبات (دورات جافة)

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

تحديث الملحن - التشغيل الجاف - الملف الشخصي - الإفراط

إنشاء المشروع

أخيرًا وليس آخرًا ، يجب أن نذكر الأمر إنشاء مشروع.

يأخذ أمر المشروع الجديد اسم حزمة كوسيطة ، ثم يقوم باستنساخه وتنفيذه تثبيت الملحنداخله. يعد هذا أمرًا رائعًا لتهيئة المشاريع - لم تعد بحاجة إلى البحث عن عنوان URL للحزمة المطلوبة على GitHub ، واستنساخه ، وانتقل إلى المجلد بنفسك وقم بتنفيذ الأمر ثبيت.

تستخدم المشاريع الكبيرة مثل Symfony و Laravel هذا النهج لتهيئة تطبيقاتها "الهيكلية" ، وينضم إليها العديد من الآخرين أيضًا.

على سبيل المثال ، في Laravel يتم استخدامه على النحو التالي:

الملحن create-project laravel / laravel -prefer-dist -profile -verbose
للفريق إنشاء مشروعيمكنك تمرير معلمتين إضافيتين: طريقالمكان الذي تريد تثبيت المشروع فيه (إذا لم يتم تحديده ، فسيتم استخدام اسم الحزمة) ، و إصدار(سيتم استخدام الأخير إذا لم يتم تحديده).

استنتاج

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

بدأ معرفتي بـ Composer بحقيقة أننا بدأنا في تنفيذ مشروع على إطار عمل YII 2. كان YII 2 لا يزال في مرحلة الإصدار ألفا ، وإلى جانب حقيقة أنه كان أداة موثقة قليلاً ، فقد تم أيضًا جره على طول مجموعة من التقنيات غير المألوفة. لقد ذكرت ما تحتاجه لتبدأ مع YII 2.

هذه هي الطريقة التي تم بها إجراء التعارف ، حيث يتحدث زميلي عن كيفية استخدام Composer في مشروعنا:

الملحن هو مدير تبعية. والذي يسمح ، على أساس الوحدات النمطية ، بتوصيل كود طرف ثالث بنظامك. كيف يعمل باختصار:

  1. لديك مشروع يعتمد على عدة مكتبات.
  2. تعتمد بعض هذه المكتبات على مكتبات أخرى.
  3. أنت تصف في مشروعك تلك المكتبات التي تعتمد عليها شفرتك بشكل مباشر.
  4. يعثر Composer على الإصدارات الصحيحة من المكتبات المطلوبة للمشروع بأكمله ، ويقوم بتنزيلها وتثبيتها في مجلد مشروعك.

ما الذي يمكن أن يفعله الملحن؟

  • تنزيل الحزم وتبعياتها ؛
  • افتراضيًا ، يتم تنزيل الحزم من مستودع packagist.org الرسمي. يمكن لأي شخص إضافة حزمته هناك بحرية لجعل تركيبها سهلاً ومريحًا قدر الإمكان للعالم بأسره ؛
  • يمكن تنزيل الحزم ليس فقط من packagist.org ، ولكن أيضًا من أي مستودع git أو mercurial أو svn ؛
  • عند تنزيل الحزم من github.com أو bitbucket.org ، لا يلزم وجود نظام للتحكم في الإصدار (git أو hg) ، يعمل Composer من خلال واجهة برمجة التطبيقات الخاصة بهذه المواقع ؛
  • يمكن وضع المستودع مع الحزمة git / hg / svn ليس فقط على أحد المواقع المذكورة أعلاه ، ولكن في أي مكان آخر ، على سبيل المثال ، في الشبكة المحلية للمؤسسة أو بشكل عام على القرص الصلب المحلي ؛
  • بالإضافة إلى ذلك ، لا يجب أن تكون المكتبة المثبتة في شكل حزمة Composer ، يمكنك التثبيت من أي مستودع git / hg / svn لأي بنية ؛
  • أخيرًا ، لا يجب أن تكون الحزمة المراد تثبيتها مستودع git / hg / svn ، بل يمكن أن يكون ملفًا مضغوطًا عشوائيًا يمكن الوصول إليه بواسطة أي uri!
  • يتم تثبيت جميع الحزم في الدليل الحالي (حيث تم تنفيذ أمر التثبيت) ، وهذا يسمح لك بالحصول على عدة إصدارات مختلفة من المكتبات عند العمل في مشاريع مختلفة بالتوازي ؛
  • يقوم أمر التحديث بتحديث جميع الحزم المثبتة (أو يعيد تثبيت الحزم التي تمت إزالتها عن طريق الخطأ) إلى أحدث الإصدارات. أو قد لا يتم تحديث الإصدارات إلى الأحدث ، إذا قمت بإنشاء ملف composer.lock خاص - وهذا يسمح لك بإصلاح مجموعة من الإصدارات الثابتة لجميع المكتبات المستخدمة في المشروع ؛
  • بعد تثبيت الحزم ، يتم إنشاء autoload.php تلقائيًا ، والتي يمكنك من خلالها توصيل المكتبات المثبتة في كود مشروعك. عند إعداد حزمة Composer ، يوصى باستخدام PSR-0 - المعيار القياسي لتحديد موقع ملفات php وتسميتها حتى يتمكن التحميل التلقائي من العثور عليها بسهولة. على أي حال ، يمكن لمؤلف الحزمة أن يصف القواعد التي سيبحث بها التحميل التلقائي عن ملفات فئات أو مساحات أسماء معينة. إذا كنت تقوم بتثبيت مكتبة غير مؤطرة كحزمة Composer (على سبيل المثال ، مستودع git عشوائي من github) ، فإن مهمة وصف قواعد التحميل التلقائي تقع على عاتقك. لذلك لا يوجد سحر مع autoload.php الذي تم إنشاؤه - يمكنه تحميل كل شيء (حتى المكتبات التي تحتوي على مجموعة من الوظائف خارج الفصول الدراسية) ، الشيء الرئيسي هو أن القواعد موصوفة (بواسطة مؤلف المكتبة أو بواسطتك).

كما فعلنا من قبل ، عندما لم يكن هناك Composer: قمنا بتنزيل الأطر والمكتبات التي نحتاجها ، وفكرنا في مكان فك حزمها ، وكتبنا مجموعة من المتطلبات (أو تتطلب مرة واحدة من أجل الموثوقية) في المشروع.

ما نفعله الآن بعد أن لدينا Composer: سيقوم بتنزيل جميع المكتبات وإنشاء autoload.php لنا. بالإضافة إلى ذلك ، إذا أردنا عرض "Super Hello World" للزملاء ، فسيكون ذلك كافيًا لنشر كود مشروعنا على github (أو في أي مكان آخر) ، دون تضمين جميع المكتبات المطلوبة في المستودع ودون إعداد تعليمات طويلة حول كيفية تثبيتها. سيكون كافيًا لزملائنا تنزيل (استنساخ) "Super Hello World" وتنفيذ الأمر

1 ملحن php. تثبيت فار

php composer.phar install

يتم توزيع Composer كملف composer.phar واحد (phar هو أرشيف php) - في الواقع هو نص PHP يمكنه قبول عدة أوامر (تثبيت ، تحديث ، ...) ويمكنه تنزيل المكتبات وفك ضغطها.

عند إعداد مشروعك وتثبيت التبعيات له ، عليك أن تتذكر أن رأس كل شيء هو ملف composer.json. يجب أن يكون في جذر المشروع ، في حالتنا بجوار الويب وعرض الدلائل (YII 2). من الضروري في هذا الملف تحديد المكتبات التي يعتمد عليها مشروعنا. بالإضافة إلى ذلك ، إذا لم تكن هذه المكتبات عبارة عن حزم Composer منسقة ، فأنت بحاجة إلى تحديد بعض المعلومات الإضافية حول المكتبة المثبتة (على سبيل المثال ، وصف قواعد التحميل التلقائي للفئات والوظائف لـ autoload.php).

composer.json ، بتنسيق بيانات JSON. على السؤال "لماذا بالضبط JSON؟" مطورو الملحن يجيبون "لأن. مجرد قبوله. "

نحتاج إلى وصف كائن js واحد يحتوي على جميع التعليمات. البيان الأول والأهم: يتطلب.
نقوم بتوصيل الحزم من موقع packagist.org:

1 2 3 4 5 6 7 ("تتطلب": ("php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev" } }

("تتطلب": ("php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev" } }

لقد وصفت هنا اعتماد المشروع على إصدار PHP 5.3.0 والإصدارات الأحدث ، silex (microframework) و twig (محرك النموذج). يتوفر Silex و Twig كحزم Composer على packagist.org ، لذلك لا يلزم تكوين إضافي. لاحظ أن Silex ، بدورها ، تعتمد على عدة حزم أخرى - سيتم تنزيلها جميعًا وتثبيتها تلقائيًا.

يتكون اسم الحزمة من جزأين مفصولين بشرطة مائلة: اسم البائع واسم المكتبة. غالبًا ما يكون اسم المورد هو لقب المؤلف أو اسم الشركة. في بعض الأحيان ، يكون اسم الموفر هو نفسه اسم المكتبة أو إطار العمل نفسه.

لكل حزمة ، تأكد من تضمين رقم الإصدار. يمكن أن يكون فرعًا في المستودع ، على سبيل المثال ، "dev-master" - تشير بادئة dev إلى أن هذا هو اسم الفرع ، وأن الفرع نفسه يسمى "master" ، على التوالي. بالمناسبة ، إذا قمت بتنزيل رمز من مستودع بعيد ، فسيقوم Composer بفحص العلامات وأسماء الفروع في هذا المستودع بحثًا عن شيء مشابه لأرقام الإصدارات ، على سبيل المثال ، سيتم استخدام العلامة "v1.2.3" كمؤشر للإصدار 1.2 .3.

نقوم بتوصيل حزمة Composer الخاصة بنا

1 2 3 4 5 6 7 8 9 10 11 12 13 14 ("تتطلب": ("php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev" , "mycompany/superlogger" : "dev-master" } , "repositories" : [ { "type" : "git" , "url" : } ] }

("تتطلب": ("php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev", "mycompany/superlogger":"dev-master" }, "repositories":[ { "type":"git", "url":"http://github.com/pqr/superlogger" } ] }

للسماح لـ Composer بمعرفة مكان البحث عن حزمة "mycompany / superlogger" ، أضفنا مستودعات مصفوفة مع ارتباط إلى مستودع github المقابل. لاحظ أن الإدخالات في مصفوفة المستودعات لا ترتبط ارتباطًا مباشرًا بالكتلة المطلوبة - لا توجد مراسلات بين الحزم والمستودعات. بقدر ما أفهم ، يبحث Composer عن جميع الحزم المطلوبة في جميع المستودعات المحددة (بما في ذلك على موقع packagist.org) ويقوم بتنزيل المطابقات التي تم العثور عليها وفقًا لبعض الأولويات الداخلية. بشكل أعمق ، لم أفهم هذه اللحظة بعد ، صححني إذا كان أحد يعرف التفاصيل.

ربط مستودع git التعسفي

الآن دعنا ندرج مكتبة Superlib القديمة الخاصة بنا ، والتي توجد على github ، ولكنها ليست حزمة Composer مزينة ، منذ ذلك الحين هي قديمة جدا.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ("تتطلب": ("php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev" , "mycompany/superlogger" : "dev-master" , "pqr/superlib" : "1.2.3" } , "repositories" : [ { "type" : "git" , "url" : "http://github.com/pqr/superlogger")، ("type": "package"، "package": ("name": "pqr / superlib"، "version": "1.2.3"، "source": ("type": "git"، " عنوان url ": "http://github.com/pqr/superlib"، "مرجع": "رئيسي") ، "تحميل تلقائي": ("classmap": ["timer.php"] ، "ملفات": ["lib_functions.php"])))])

("تتطلب" :( "php": "> = 5.3.0"، "silex / silex": "dev-master"، "twig / twig": "> = 1.8،<2.0-dev", "mycompany/superlogger":"dev-master", "pqr/superlib":"1.2.3" }, "repositories":[ { "type":"git", "url":"http://github.com/pqr/superlogger" }, { "type":"package", "package":{ "name":"pqr/superlib", "version":"1.2.3", "source":{ "type":"git", "url":"http://github.com/pqr/superlib", "reference":"master" }, "autoload":{ "classmap":["timer.php"], "files":["lib_functions.php"] } } } ] }

تمت إضافة كائن إلى مصفوفة المستودعات التي تصف حزمة pqr / superlib بالكامل. في الواقع ، هذا هو الوصف الذي يجب على مؤلف المكتبة أن يصنعه ويضعه داخل مستودع التخزين الخاص به. ولكن وفقًا لشروط المشكلة ، فإن superlib ليست حزمة Composer مزينة ، لذلك كان علينا إنشاء وصفها كجزء من مشروع Super Hello World. وبالمثل ، يمكنك توصيل أي مكتبة أخرى ، بما في ذلك. ملف مضغوط بسيط.

نقوم بتوصيل ملف مضغوط بسيط

على سبيل المثال ، إليك كيف يمكن أن يبدو وصف التبعية على محرك قوالب Smarty ، الموزع كملف مضغوط مع مصادر في svn ، كما يلي:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ("المستودعات": [("type": "package"، "package": ("name": "smarty / smarty"، "version": "3.1.7"، "dist": ("url": "http://www.smarty.net/files/Smarty-3.1.7.zip"، "type": "zip")، "source": ("url": "http://smarty-php.googlecode.com/svn/"، "type": "svn"، "reference": "العلامات / Smarty_3_1_7 / التوزيع /")))]، "تتطلب": ("smarty / smarty": "3.1. *"))

("المستودعات": [("type": "package"، "package" :( "name": "smarty / smarty"، "version": "3.1.7"، "dist" :( "url": " http://www.smarty.net/files/Smarty-3.1.7.zip "،" type ":" zip ")،" source ":(" url ":" http: //smarty-php.googlecode. com / svn / "،" type ":" svn "،" reference ":" tags / Smarty_3_1_7 / Distribution / ")))]،" تتطلب ":(" smarty / smarty ":" 3.1. * "))

هل أعجبك المقال؟ أنشرها