- Composer. Установка под Linux. Настрока автозагрузки
- Установка composer
- Обновление composer
- Управление зависимостями
- Настройка composer.json
- Версии пакетов
- Автозагрузка
- Files
- Classmap
- Примеры
- Autoload в composer.json
- Upgrade guides for Composer 1.x to 2.0
- For composer CLI users
- For integrators and plugin authors
- Detailed differences in event flow during dependency resolution, composer updates and installs
- Composer v1
- Composer v2
- For Composer repository implementors
- metadata-url
- providers-api
- Установка Composer Ubuntu 18.04
- Установка Composer в Ubuntu
- Использование Composer
- Выводы
Composer. Установка под Linux. Настрока автозагрузки
Лаконичная заметка по установке, обновлению и настройке менеджера зависимостей под PHP — Composer. Я забегу немного на перед и порекомендую устанавливать composer на глобальном уровне. В дальнейшем будет на много проще работать с ним. Обновления будут разовыми для всех проектов (проблем с несовместимостью не было еще ни разу), не нужно возиться с правами на исполнение и алиасами.
Установка composer
- Локальная установка composer.phar в текущий каталог проекта:
- Глобальная установка/обновление composer на уровне системы:
Внимание!
Если вы прописывали alias на php composer.phar в
Удалите его!
Иначе вы получите ошибку: Не найден файл composer.phar при запуске команды composer .
Подключаем файл автозагрузки composer в проект (в случае, если вы не используете фреймворк):
Обновление composer
После обновления вы увидите сообщение о том, как откатится до предыдущей версии:
Примечание:
Для упрощения доступа к локально установленному Composer можно использовать следующие aliases :
Чтобы эти сокращения были доступны после перезагрузки — добавьте их в файл
/.bashrc и выполните:
Также рекомендую обратить внимание на расширение oh-my-zsh для оболочки ZSH. Очень хорошо решает вопрос дополнения консольных команд разных фреймворков, утилит и библиотек.
Управление зависимостями
Для загрузки и обновления всех зависимостей, указанных в сomposer.json выполните:
Для загрузки последних используемых зависимостей из файла сomposer.lock запустите:
Обновление определенного пакета до указанной версии используйте require:
Внимание!
При ошибке composer exceeded the timeout of 300 seconds необходимо увеличить время выполнения скрипта:
Настройка composer.json
Описание основных настроек файла конфигурации composer.json:
Версии пакетов
Маски, применимые для указания версии пакета:
Советы
- Не устанавливайте жесткие ограничения, если на то нет обоснованных причин — это упростит обновление зависимостей в будущем. Но, при этом старайтесь указывать максимально доступную верхнюю границу версии.
- Если позволяет ситуация используйте * вместо dev-master .
- Не указывайте ограничение версии комбинируя условия сравнения и маски (wildcards), например: >=2.* — сomposer может не понять какую версию вы хотите.
Автозагрузка
Composer предоставляет также может выполнять ф-ции автозагрузки классов. Все, что вам необходимо, это сгенерировать/обновить и подключить файл автозагрузки vendor/autoload.php:
Files
Подключение файлов перед инициализацией приложения
Classmap
Загрузка классов из каталога и загрузка отдельных конкретных классов, которые расположены в каталогах без соблюдения стандартов PSR*.
Этот стандарт требует указание пути к родительскому каталогу пакета (не к пакету, а именно к родительской директории в которой лежит каталог с библиотекой). Описание стандарта: http://www.php-fig.org/psr/psr-0/. Например, для PSR-0 «MyPackage»: «library/» файловая структура будет такой:
В этом стандарте для Namespace\\ указывается путь непосредственно к каталогу с пакетом!
Внимание!
Стандарты PSR-0 и PSR-4 чувствительны к регистру! Загрузчик не найдет namespace Model если классы расположены в подкаталоге model/.
Примеры
Пример использования loader‘а composer для авто подключения классов:
Указать каталог с классами без namespace (PSR-0):
Указать путь к родительской директории пакета:
Указать каталог в котором расположен пакет (PSR-4):
Указать соответствие между Namespace\Class и файлом:
Autoload в composer.json
Для управления автозагрузкой через composer.json используйте секцию конфига — autoload :
Описание секции autoload:
Пример кода для автозагрузки массива Namespace:
#composer, #autoload, #spl, #psr-0, #psr-4, #classmap
Источник
Upgrade guides for Composer 1.x to 2.0
For composer CLI users
- The new platform-check feature means that Composer checks the runtime PHP version and available extensions to ensure they match the project dependencies. If a mismatch is found, it exits with error details to make sure problems are not overlooked. To avoid issues when deploying to production it is recommended to run composer check-platform-reqs with the production PHP process as part of your build or deployment process.
- If a package exists in a higher priority repository, it will now be entirely ignored in lower priority repositories. See repository priorities for details.
- Invalid PSR-0 / PSR-4 class configurations will not autoload anymore in optimized-autoloader mode, as per the warnings introduced in 1.10
- On linux systems supporting the XDG Base Directory Specification, Composer will now prefer using XDG_CONFIG_DIR/composer over
/.composer if both are available (1.x used
/.composer first)
For integrators and plugin authors
- composer-plugin-api has been bumped to 2.0.0 — you can detect which version of Composer you run via PluginInterface::PLUGIN_API_VERSION
- PluginInterface added a deactivate (so plugin can stop whatever it is doing) and an uninstall (so the plugin can remove any files it created or do general cleanup) method.
- Plugins implementing EventSubscriberInterface will be deregistered from the EventDispatcher automatically when being deactivated, nothing to do there.
- Pool objects are now created via the RepositorySet class, you should use that in case you were using the Pool class directly.
- Custom installers extending from LibraryInstaller should be aware that in Composer 2 it MAY return PromiseInterface instances when calling parent::install/update/uninstall/installCode/removeCode. See composer/installers for an example of how to handle this best.
- The Composer\Installer class changed quite a bit internally, but the inputs are almost the same:
- setAdditionalInstalledRepository is now setAdditionalFixedRepository
- setUpdateWhitelist is now setUpdateAllowList
- setWhitelistDependencies , setWhitelistTransitiveDependencies and setWhitelistAllDependencies are now all rolled into setUpdateAllowTransitiveDependencies which takes one of the Request::UPDATE_* constants
- setSkipSuggest is gone
- vendor/composer/installed.json format changed:
- packages are now wrapped into a «packages» top level key instead of the whole file being the package array
- packages now contain an «installed-path» key which lists where they were installed
- there is a top level «dev» key which stores whether dev requirements were installed or not
- Removed OperationInterface::getReason as the data was not accurate. There is no replacement available.
- PreFileDownloadEvent now receives an HttpDownloader instance instead of RemoteFilesystem , and that instance cannot be overridden by listeners anymore, you can however call setProcessedUrl or setCustomCacheKey.
- VersionSelector::findBestCandidate ‘s third argument (phpVersion) was removed in favor of passing in a complete PlatformRepository instance into the constructor
- InitCommand::determineRequirements ‘s fourth argument (phpVersion) should now receive a complete PlatformRepository instance or null if platform requirements are to be ignored
- IOInterface now extends PSR-3’s LoggerInterface , and has new writeRaw + writeErrorRaw methods
- RepositoryInterface changes:
- A new loadPackages(array $packageNameMap, array $acceptableStabilities, array $stabilityFlags) function was added for use during pool building
- search now has a third $type argument
- A new getRepoName() function was added to describe the repository
- A new getProviders() function was added to list packages providing a given package’s name
- Removed BaseRepository abstract class
- DownloaderInterface changes:
- download now receives a third $prevPackage argument for updates
- download should now only do network operations to prepare the package for installation but not actually install anything
- prepare (do user prompts or any checks which need to happen to make sure that install/update/remove will most likely succeed), install (should do the non-network part that download used to do) and cleanup (cleaning up anything that may be left over) were added as new steps in the package install flow
- All packages get first downloaded, then all together prepared, then all together installed/updated/uninstalled, then finally cleanup is called for all. Therefore for error recovery it is important to avoid failing during install/update/uninstall as much as possible, and risky things or user prompts should happen in the prepare step rather. In case of failure, cleanup() will be called so that changes can be undone as much as possible.
- If you used RemoteFilesystem you probably should use HttpDownloader instead now
- PRE_DEPENDENCIES_SOLVING and POST_DEPENDENCIES_SOLVING events have been removed, use the new PRE_OPERATIONS_EXEC , PRE_POOL_CREATE or other existing events instead or talk to us if you think you really need this. See below for more details.
- The bundled composer/semver is now the 3.x range, see release notes for 2.0 and 3.0 for the minor breaking changes there
- Run Composer with COMPOSER_DEBUG_EVENTS=1 set in the environment to show which events happen which might help you.
Detailed differences in event flow during dependency resolution, composer updates and installs
Composer v1
- Composer resolves dependencies (dispatching PRE/POST_DEPENDENCIES_SOLVING)
- It then iterates over all packages one by one (dispatching PRE_PACKAGE_INSTALL/UPDATE/UNINSTALL, then PRE_FILE_DOWNLOAD if needed, then POSTPACKAGE*)
- And finally writes the lock file at the end
Composer v2
The update and install process have been split up.
- Composer resolves dependencies (dispatching PRE_POOL_CREATE)
- It then writes the lock file and that’s the end of the update
Install then does:
- Dispatches PRE_OPERATIONS_EXEC with the full list of operations to be executed
- Downloads all the packages not in cache yet in parallel (dispatching PRE_FILE_DOWNLOAD for those not in cache yet)
- It then iterates over all packages and executes updates/installs/uninstalls in parallel (dispatching PRE_PACKAGE_INSTALL/UPDATE/UNINSTALL then POSTPACKAGE* but one package started last may finish installing before another is done for example).
For Composer repository implementors
Composer 2.0 adds support for a new Composer repository format.
It is possible to build a repository which is compatible with both Composer v1 and v2, you keep everything you had and simply add the new fields in packages.json .
Here are examples of the new values from packagist.org:
metadata-url
This new metadata-url should serve all packages which are in the repository.
- Whenever Composer looks for a package, it will replace %package% by the package name, and fetch that URL.
- If dev stability is allowed for the package, it will also load the URL again with $packageName
dev (e.g. /p2/foo/bar
dev.json to look for foo/bar ‘s dev versions).
dev.json files containing package versions MUST contain only versions for the foo/bar package, as <"packages":<"foo/bar":[ . versions here . ]>> .
If your repository only has a small number of packages, and you want to avoid the 404-requests, you can also specify an «available-packages» key in packages.json which should be an array with all the package names that your repository contain. Alternatively you can specify an «available-package-patterns» key which is an array of package name patterns (with * matching any string, e.g. vendor/* would make composer look up every matching package name in this repository).
providers-api
The providers-api is optional, but if you implement it it should return packages which provide a given package name, but not the package which has that name. For example https://packagist.org/providers/monolog/monolog.json lists some package which have a «provide» rule for monolog/monolog, but it does not list monolog/monolog itself.
This is also optional, it should accept an optional ?filter=xx query param, which can contain * as wildcards matching any substring.
It should return the names of package which names match the filter (or all names if no filter is present). Replace/provide rules should not be considered here.
Composer and all content on this site are released under the MIT license.
Источник
Установка Composer Ubuntu 18.04
Composer — это свободный пакетный менеджер для установки зависимостей и самих модулей PHP. Он разработан Нильсом Адерманом и Хорди Боггиано. С помощью скрипта можно в несколько нажатий установить нужный модуль, а также все его зависимости, например, ZendFramework или Symphony. Он широко используется разработчиками PHP скриптов.
В этой статье мы рассмотрим как установить Composer Ubuntu 18.04 и более поздних версиях, а также как пользоваться утилитой.
Установка Composer в Ubuntu
Вы не можете установить программу из официальных репозиториев. Нужно скачать скрипт из официального сайта и поместить его в папку с вашим проектом. Но сначала обновите систему и установите зависимости:
sudo apt update
sudo apt install curl php-cli php-mbstring git unzip
Установка Composer ubuntu может быть выполнена двумя способами. Либо локально в папку проекта, либо же глобально, для всей системы. Сначала рассмотрим как установить программу локально. Перейдите в папку проекта:
Выполните такую команду для загрузки установочного скрипта:
curl -sS https://getcomposer.org/installer -o composer-setup.php
Затем запустите этот скрипт, чтобы создать файл composet.phar, который и будет использоваться для установки пакетов:
Теперь вы можете проверить работает ли Composer:
Теперь рассмотрим как установить программу глобально для всей системы. Вы можете скачивать файл установщика в любую папку, например, домашнюю:
curl -sS https://getcomposer.org/installer -o composer-setup.php
Только команда установки будет отличаться, в ней мы указываем папку, куда нужно установить скрипт:
sudo php composer-setup.php —install-dir=/usr/local/bin —filename=composer
Для проверки работы, вы можете выполнить команду:
Использование Composer
Для того чтобы указать какие пакеты нужно устанавливать используется конфигурационный файл composer.json. В нем сообщаются зависимости вашего проекта, а также их версии. Создайте этот файл в корневой папке вашего проекта. Синтаксис записей очень прост, и если вы раньше имели дело с JSON, то без проблем разберетесь:
<
«require»: <
«производитель/пакет»: «версия»
>
«require-dev»: <
«производитель/пакет»: «версия»
>
>
Секция require отвечает за пакеты, необходимые для работы программы, а require-dev — только за пакеты для разработки. Например, для нашего проекта необходимо установить библиотеку работы с RSS Atom — picofeed. Для этого сначала откройте сайт https://packagist.org и найдите этот пакет:
На его странице вы можете видеть команду composer, которой его можно установить, в ней полное имя, а чуть ниже версию:
Наш файл будет выглядеть вот так:
Для того чтобы установить все пакеты, описанные в файле конфигурации, используйте команду:
php composer.phar install
После установки пакетов composer создает файл autoload.php в папке vendor вашего проекта, с помощью него можно включить в проект все библиотеки, которые были установлены. Для этого достаточно подключить этот файл к проекту с помощью инструкции include или require:
Например, возьмем небольшой пример чтения ленты rss с GitHub:
use PicoFeed\Reader\Reader;
use PicoFeed\PicoFeedException;
$reader = new Reader;
// Return a resource
$resource = $reader->download(‘https://losst.ru/feed/’);
// Return the right parser instance according to the feed format
$parser = $reader->getParser(
$resource->getUrl(),
$resource->getContent(),
$resource->getEncoding()
);
// Return a Feed object
$feed = $parser->execute();
// Print the feed properties with the magic method __toString()
echo $feed;
>
catch (PicoFeedException $e) <
// Do Something.
>
?>
Вы можете управлять зависимостями не только с помощью конфигурационного файла. Composer имеет несколько команд для легкого управления. Чтобы добавить пакет в зависимости проекта используйте команду require:
php composer.phar require picofeed
Пакет сразу же будет установлен. А теперь вы его можете удалить:
php composer.phar remove picofeed
Если версии пакетов устарели, то вы можете их обновить с помощью одной команды:
php composer.phar update
Выводы
В этой небольшой статье мы рассмотрели как выполняется установка Composer Ubuntu 18.04 и 16.04, а также как использовать эту утилиту в своем проекте для разрешения зависимостей. Это очень удобно, когда вы можете один раз указать нужные пакеты и больше не заботиться об их установке и обновлении на других машинах.
Источник