Освоение Композитора: Советы И Рекомендации По Использованию

Предлагаю читателям Хабрахабра перевод статьи «Освоение композитора – советы и рекомендации» Бруно Скворц.



Освоение композитора: советы и рекомендации по использованию

Composer произвел революцию в управлении пакетами в PHP и помог разработчикам по всему миру создавать независимый от платформы и общий код. Но все равно мало кто выходит за рамки основ его функциональности, поэтому в этой статье мы попытаемся осветить некоторые полезные приемы его использования.



Глобальная установка

Хотя этот вариант четко описан в документации, Composer можно (и в большинстве случаев следует) установить глобально.

Глобальная установка означает, что вместо:

  
   
  
  
 
 {
     "require": {
         "myproject": "someversion"
     }
 }
 
В любом проекте вы можете просто ввести:
  
  
  
 
 {
     "config": {
         "optimize-autoloader": true
     }
 }
 
Это позволяет очень легко создавать новые проекты (например, с помощью команды создать-проект ) в любом месте вашей файловой системы.

Чтобы установить Composer глобально, следуйте эти инструкции .



Правильная установка зависимостей

Читая вводные инструкции или файлы README, многие напишут вам что-то вроде:
Просто добавьте следующее в свой композитор.

json файл :

  
  
  
 
 /docs               export-ignore
 /tests              export-ignore
 /.

gitattributes export-ignore /.

gitignore export-ignore /.

travis.yml export-ignore /phpunit.xml export-ignore

Но этот подход имеет ряд недостатков.

Во-первых, простой копипаст может привести к ошибкам.

Во-вторых, новичку может быть не очевидно, куда разместить этот код, если у него уже есть большой файл.

композитор.

json , и это тоже приведет к ошибке.

Наконец, некоторые люди будут использовать Composer впервые и, возможно, впервые будут использовать командную строку.

Поэтому рекомендуется охватить все виды случаев, в которых новички могут чувствовать неуверенность (есть ли у них графический редактор или они будут использовать командную строку? Если последнее, установлен ли у них текстовый редактор, и если да, то какой именно).

? Вы сами объясняете процедуру редактирования файла? Что делать, если файла композитора.

json еще нет в проекте? Вы также описываете, как создать новый файл?).

Лучший способ добавить новую зависимость в файл композитор.

json - это использовать команду требовать :

php composer.phar somecommand

Это добавит все необходимое в файл зависимостей без ручного вмешательства.

Если вам нужно добавить пакеты в раздел требование-разработчик , добавьте опцию в команду --dev :

composer somecommand

Также команда требовать поддерживает добавление нескольких пакетов одновременно, просто разделите их пробелом.



Блокировка файлов

Файл композитор.

lock сохраняет текущий список установленных зависимостей и их версий.

Таким образом, к моменту обновления версий зависимостей другие люди, клонирующие ваш проект, получат те же версии.

Это гарантирует, что каждый, кто получит ваш проект, будет иметь «среду пакета», идентичную той, которую вы использовали во время разработки, и поможет избежать ошибок, которые могут возникнуть при обновлении версии.

Файл композитор.

lock почти всегда необходимо добавить в систему контроля версий ( не всегда ).

Кроме того, файл композитор.

lock содержит хэш файла композитор.

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 это самый безопасный выбор.



Локальная и глобальная конфигурация

Значения параметров по умолчанию не высечены на камне.

Подробное описание возможных параметров конфигурации ( конфигурация ) см.

связь .

Например, указав:

composer require somepackage/somepackage:someversion

вы заставляете Composer оптимизировать карту классов после каждой установки или обновления пакета (или, другими словами, каждый раз, когда создается файл автозагрузки классов).

Это немного медленнее, чем создание автозагрузчика по умолчанию, и замедляется по мере роста проекта.

Еще одним полезным параметром может быть кэш-файлы-maxsize .

В больших проектах (таких как eZ Publish или Symfony) кеш может заполняться довольно быстро.

Увеличение размера кэша позволит Composer работать быстрее и дольше.

Обратите внимание, что параметры конфигурации можно задавать глобально, и в этом случае они будут влиять на все проекты (см.

конфигурация ).

Например, чтобы глобально задать параметр размера кэша, вам нужно либо отредактировать файл ~/.

composer/config.json или запустите:

composer require phpunit/phpunit --dev



Профилирование и подробный вывод (подробный)

Если вы добавите параметр --профиль к любой команде при использовании Composer в командной строке вывод будет содержать не только конечный результат, например:

composer config --global cache-files-maxsize "2048MiB"

Но он также добавит время выполнения команды и размер используемой памяти в начало каждой строки вывода:

[174.6MB/54.70s] Memory usage: 174.58MB (peak: 513.47MB), time: 54.7s

Я использую эту опцию для выявления «медленных» пакетов и отслеживания улучшения или снижения производительности разные версии PHP .

Как и предыдущий, параметр --подробный заставит Composer выводить дополнительную информацию о каждый выполняемая операция, сообщая вам, что точно происходит в данный момент. Некоторые даже устанавливают композитор --verbose --profile псевдоним команды композитор по умолчанию.



Пользовательские источники

Если вашего проекта еще нет на Packagist, иногда вам просто нужно установить пакет с GitHub (например, если пакет все еще находится в разработке).

Для этого см.

наше руководство .

Когда у тебя есть его версии популярного пакета, от которого зависит ваш проект, вы можете использовать собственные источники в сочетании со встроенным псевдонимом, чтобы встроить свою собственную ветку для общедоступного пакета, например описано здесь Матье Наполи.



Ускорение Composer

Используя отличный метод, описанный Марк Ван Эйк , вы можете ускорить выполнение Composer, вызвав его через HHVM. Другой способ — использовать параметр --prefer-dist , после установки Composer будет загружать стабильные упакованные версии проекта вместо клонирования из системы контроля версий (что намного медленнее).

Эта опция используется по умолчанию, поэтому вам не нужно включать ее в стабильных проектах.

Если вам нужно скачать проект из исходников, воспользуйтесь опцией --prefer-источник .

Подробнее об этом вы можете узнать в разделе установить Здесь .



Уменьшение размера проекта Composer

Если вы разработчик проектов, дружественных к Composer, эта часть вас также заинтересует. К этот пост на Reddit , вы можете использовать файл .

gitattributes игнорировать некоторые файлы и папки при упаковке пакета для режима --prefer-dist .



[175.9MB/54.64s] Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution

Как это работает? Когда вы загружаете проект на GitHub, ссылка автоматически становится доступной.

«Скачать zip» , с помощью которого вы сможете скачать архив вашего проекта.

Более того, Packagist использует эти автоматически созданные архивы для загрузки зависимостей с опцией --prefer-dist , который затем будет разархивирован локально (гораздо быстрее, чем клонирование исходных файлов проекта).

Если вы добавите в .

gitattributes тесты, документацию и другие файлы, не имеющие отношения к логике проекта, эти архивы не будут их содержать, становясь намного легче.

Однако людям, которые хотят отладить вашу библиотеку или запустить тесты, необходимо будет указать параметр --prefer-источник .

PhpLeague принял этот подход и включил его в свою «скелет упаковки» ( Скелет упаковки ), поэтому любой проект на его основе будет автоматически “расстояние дружелюбное” .



Показывать

Если вы вдруг забыли, какую версию PHP или его расширений вы используете, или вам нужен список всех установленных проектов (с описанием каждого) с их версиями, вы можете воспользоваться командой показывать с параметрами --Платформа ( -п ) И --установлен ( ): шоу композитора -- установлено

$ composer show --installed behat/behat v3.0.15 Scenario-oriented BDD framework for PHP 5.3 behat/gherkin v4.3.0 Gherkin DSL parser for PHP 5.3 behat/mink v1.5.0 Web acceptance testing framework for PHP 5.3 behat/mink-browserkit-driver v1.1.0 Symfony2 BrowserKit driver for Mink framework 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 framework extension for Behat behat/transliterator v1.0.1 String transliterator components/bootstrap 3.3.2 The most popular front-end framework for developing responsive, mobile first projects on the web. components/jquery 2.1.3 jQuery JavaScript Library doctrine/annotations v1.2.4 Docblock Annotations Parser doctrine/cache v1.4.1 Caching library offering an object-oriented API for many cache backends doctrine/collections v1.3.0 Collections Abstraction library doctrine/common v2.5.0 Common Library for Doctrine projects doctrine/dbal v2.5.1 Database Abstraction Layer doctrine/doctrine-bundle v1.4.0 Symfony DoctrineBundle doctrine/doctrine-cache-bundle v1.0.1 Symfony2 Bundle for Doctrine Cache doctrine/inflector v1.0.1 Common String Manipulations with regard to casing and singular/plural rules. doctrine/instantiator 1.0.4 A small, lightweight utility to instantiate objects in PHP without invoking their constructors doctrine/lexer v1.0.1 Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. egulias/listeners-debug-command-bundle 1.9.1 Symfony 2 console command to debug listeners ezsystems/behatbundle dev-master bd95e1b Behat bundle for help testing eZ Bundles and projects ezsystems/comments-bundle dev-master 8f95bc7 Commenting system for eZ Publish ezsystems/demobundle dev-master c13fb0b Demo bundle for eZ Publish Platform ezsystems/demobundle-data v0.1.0 Data for ezsystems/demobundle ezsystems/ezpublish-kernel dev-master 3d6e48d eZ Publish API and kernel. This is the heart of eZ Publish 5. ezsystems/platform-ui-assets-bundle v0.5.0 External assets dependencies for PlatformUIBundle ezsystems/platform-ui-bundle dev-master 4d0442d eZ Platform UI Bundle ezsystems/privacy-cookie-bundle v0.1 Privacy cookie banner integration bundle into eZ Publish/eZ Platform fabpot/goutte v1.0.7 A simple PHP Web Scraper friendsofsymfony/http-cache 1.3.1 Tools to manage cache invalidation friendsofsymfony/http-cache-bundle 1.2.1 Set path based HTTP cache headers and send invalidation requests to your HTTP cache guzzle/guzzle v3.9.3 PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle hautelook/templated-uri-bundle 2.0.0 Symfony2 Bundle that provides a RFC-6570 compatible router and URL Generator. hautelook/templated-uri-router 2.0.1 Symfony2 RFC-6570 compatible router and URL Generator imagine/imagine 0.6.2 Image processing for PHP 5.3 incenteev/composer-parameter-handler v2.1.0 Composer script handling your ignored parameter file instaclick/php-webdriver 1.0.17 PHP WebDriver for Selenium 2 jdorn/sql-formatter v1.2.17 a PHP SQL highlighting library knplabs/knp-menu v1.1.2 An object oriented menu library knplabs/knp-menu-bundle v1.1.2 This bundle provides an integration of the KnpMenu library kriswallsmith/assetic v1.2.1 Asset Management for PHP kriswallsmith/buzz v0.13 Lightweight HTTP client league/flysystem 0.5.12 Many filesystems, one API. liip/imagine-bundle 1.2.6 This Bundle assists in imagine manipulation using the imagine library monolog/monolog 1.13.1 Sends your logs to files, sockets, inboxes, databases and various web services nelmio/cors-bundle 1.3.3 Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony2 application ocramius/proxy-manager 0.5.2 A library providing utilities to generate, instantiate and generally operate with Object Proxies oneup/flysystem-bundle v0.4.2 Integrates Flysystem filesystem abstraction library to your Symfony2 project. pagerfanta/pagerfanta v1.0.3 Pagination for PHP 5.3 phpdocumentor/reflection-docblock 2.0.4 phpspec/prophecy v1.4.1 Highly opinionated mocking framework for PHP 5.3+ phpunit/php-code-coverage 2.0.16 Library that provides collection, processing, and rendering functionality for PHP code coverage information. phpunit/php-file-iterator 1.4.0 FilterIterator implementation that filters files based on a list of suffixes. phpunit/php-text-template 1.2.0 Simple template engine. phpunit/php-timer 1.0.5 Utility class for timing phpunit/php-token-stream 1.4.1 Wrapper around PHP's tokenizer extension. phpunit/phpunit 4.6.4 The PHP Unit Testing framework. phpunit/phpunit-mock-objects 2.3.1 Mock Object library for PHPUnit psr/log 1.0.0 Common interface for logging libraries qafoo/rmf 1.0.0 Very simple VC framework which makes it easy to build HTTP applications / REST webservices sebastian/comparator 1.1.1 Provides the functionality to compare PHP values for equality sebastian/diff 1.3.0 Diff implementation sebastian/environment 1.2.2 Provides functionality to handle HHVM/PHP environments sebastian/exporter 1.2.0 Provides the functionality to export PHP variables for visualization sebastian/global-state 1.0.0 Snapshotting of global state sebastian/recursion-context 1.0.0 Provides functionality to recursively process PHP variables sebastian/version 1.0.5 Library that helps with managing the version number of Git-hosted PHP projects sensio/distribution-bundle v3.0.21 Base bundle for Symfony Distributions sensio/framework-extra-bundle v3.0.7 This bundle provides a way to configure your controllers with annotations sensio/generator-bundle v2.5.3 This bundle generates code for you sensiolabs/security-checker v2.0.2 A security checker for your composer.lock swiftmailer/swiftmailer v5.4.0 Swiftmailer, free feature-rich PHP mailer symfony-cmf/routing 1.3.0 Extends the Symfony2 routing component for dynamic routes and chaining several routers symfony/assetic-bundle v2.6.1 Integrates Assetic into Symfony2 symfony/monolog-bundle v2.7.1 Symfony MonologBundle symfony/swiftmailer-bundle v2.3.8 Symfony SwiftmailerBundle symfony/symfony v2.6.6 The Symfony PHP framework tedivm/stash v0.12.3 The place to keep your cache. tedivm/stash-bundle v0.4.2 Incorporates the Stash caching library into Symfony. twig/extensions v1.2.0 Common additional features for Twig that do not directly belong in core twig/twig v1.18.1 Twig, the flexible, fast, and secure template language for PHP white-october/pagerfanta-bundle v1.0.2 Bundle to use Pagerfanta with Symfony2 whiteoctober/breadcrumbs-bundle 1.0.2 A small breadcrumbs bundle for Symfony2 zendframework/zend-code 2.2.10 provides facilities to generate arbitrary code using an object oriented interface zendframework/zend-eventmanager 2.2.10 zendframework/zend-stdlib 2.2.10 zetacomponents/base 1.9 The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package. zetacomponents/feed 1.4 This component handles parsing and creating RSS1, RSS2 and ATOM feeds, with support for different feed modules (dc, content, creativeCommons, geo, iTunes).

zetacomponents/mail 1.8.1 The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, P. zetacomponents/system-information 1.1 Provides access to common system variables, such as CPU type and speed, and the available amount of memory.



Репетиции (пробные прогоны)

Чтобы просто проверить, удастся ли установить новые зависимости, вы можете использовать опцию --пробный прогон для команд установить И обновлять .

Composer в этом случае отобразит все потенциальные проблемы без непосредственного выполнения самой команды.

Никаких реальных изменений в проекте не будет. Этот метод отлично подходит для тестирования сложных зависимостей и внесения изменений перед их фактическим внесением.



composer update --dry-run --profile --verbose



Создание проекта

И последнее, но не менее важное: мы должны упомянуть команда создать-проект .

Команда создания проекта принимает в качестве аргумента имя пакета, который затем клонирует и выполняет. установка композитора внутри него.

Это отлично подходит для инициализации проектов — больше не нужно искать URL нужного пакета на GitHub, клонировать его, самостоятельно заходить в папку и выполнять команду установить .

Крупные проекты, такие как Symfony и Laravel, уже используют этот подход для инициализации своих «скелетных» приложений, и многие другие тоже присоединяются.

Например, в Laravel это используется так:

composer create-project laravel/laravel --prefer-dist --profile --verbose

команде создать-проект Вы можете передать еще два параметра: путь , в который должен быть установлен проект (если не указано, используется имя пакета) и версия (последний будет использоваться, если не указано иное).



Заключение

Надеюсь, этот список советов и рекомендаций оказался для вас полезным.

Если мы что-то упустили, сообщите нам об этом, и мы обновим статью.

И помните: если вы забыли какие-либо команды или параметры, просто загляните в шпаргалка .

Приятного сочинения! Теги: #композитор #php #разработка сайтов #php

Вместе с данным постом часто просматривают: