Менее известные трюки и советы по Composer, которые нужно знать

Источник: «Lesser known Composer tricks and tips you should know»
Менеджер зависимостей Composer является де-факто способом управления зависимостями в PHP-проектах. Вся современная PHP-разработка немыслима без Composer. Но знаете ли вы, что с помощью Composer можно делать многое, кроме установки и обновления зависимостей?

Именно так! В этой статье я перечислю такие возможности Composer, о которых вы, возможно, не знали. И которые могут помочь улучшить рабочий процесс в Composer.

Список установленных зависимостей проекта

С помощью команды show Composer можно получить список всех пакетов, установленных в проекте или во всех ваших репозиториях, в следующем формате.

brianium/paratest                   v7.2.7   Parallel testing for PHP
brick/math 0.11.0 Arbitrary-precision arithmetic library
dflydev/dot-access-data v3.0.2 Given a deep data structure, access data by dot notation.
doctrine/deprecations 1.1.2 A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 l...
doctrine/inflector 2.0.8 PHP Doctrine Inflector is a small library that can perform string m...
doctrine/lexer 3.0.0 PHP Doctrine Lexer parser library that can be used in Top-Down, Rec...
dragonmantank/cron-expression v3.3.3 CRON for PHP: Calculate the next or previous run date and determine...
egulias/email-validator 4.0.1 A library for validating emails against several RFCs
fakerphp/faker v1.23.0 Faker is a PHP library that generates fake data for you.
fidry/cpu-core-counter 0.5.1 Tiny utility to get the number of CPU cores.
filp/whoops 2.15.3 php error handling for cool kids
fruitcake/php-cors v1.2.0 Cross-origin resource sharing library for the Symfony HttpFoundation
graham-campbell/result-type v1.1.1 An Implementation Of The Result Type
guzzlehttp/guzzle 7.8.0 Guzzle is a PHP HTTP client library
guzzlehttp/promises 2.0.1 Guzzle promises library
guzzlehttp/psr7 2.6.1 PSR-7 message implementation that also provides common utility methods
guzzlehttp/uri-template v1.0.2 A polyfill class for uri_template of PHP
hamcrest/hamcrest-php v2.0.1 This is the PHP port of Hamcrest Matchers
jean85/pretty-package-versions 2.0.5 A library to get pretty versions strings of installed dependencies
laravel/breeze v1.24.0 Minimal Laravel authentication scaffolding with Blade and Tailwind.
laravel/framework v10.25.2 The Laravel Framework.
laravel/pint v1.13.2 An opinionated code formatter for PHP.
laravel/prompts v0.1.10
laravel/sail v1.25.0 Docker files for running a basic Laravel application.
laravel/sanctum v3.3.1 Laravel Sanctum provides a featherweight authentication system for ...
laravel/serializable-closure v1.3.1 Laravel Serializable Closure provides an easy and secure way to ser...
laravel/tinker v2.8.2 Powerful REPL for the Laravel framework.
$ composer show
# Вывести список установленных пакетов (по умолчанию эта функция включена, но она устарела).

$ composer show --all
# Список пакетов, доступных во всех ваших репозиториях.

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

Получение информации об определённом установленном пакете

С помощью той же команды show можно получить информацию о конкретном установленном пакете. Например, если вы хотите получить информацию о пакете spatie/laravel-web-tinker, то это можно сделать следующим образом.

composer show spatie/laravel-web-tinker

Команда получит данные из файла composer.json пакета и представит их в удобном для чтения виде следующим образом.

name     : spatie/laravel-web-tinker
descrip. : Artisan Tinker in your browser
keywords : Tinker, debug, development, laravel, spatie, web-tinker
versions : * 1.8.4
type : library
license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : https://github.com/spatie/laravel-web-tinker
source : [git] https://github.com/spatie/laravel-web-tinker.git 0ac5c8a35f86772aa965598a89f76236281490d7
dist : [zip] https://api.github.com/repos/spatie/laravel-web-tinker/zipball/0ac5c8a35f86772aa965598a89f76236281490d7 0ac5c8a35f86772aa965598a89f76236281490d7
path : F:\code\laravel\laravel-crud-example\vendor\spatie\laravel-web-tinker
names : spatie/laravel-web-tinker

support
issues : https://github.com/spatie/laravel-web-tinker/issues
source : https://github.com/spatie/laravel-web-tinker/tree/1.8.4

autoload
psr-4
Spatie\WebTinker\ => src

requires
illuminate/cookie ^5.8|^6.0|^7.0|^8.0|^9.0|^10.0
illuminate/session ^5.8|^6.0|^7.0|^8.0|^9.0|^10.0
illuminate/support ^5.8|^6.0|^7.0|^8.0|^9.0|^10.0
laravel/tinker ^1.0|^2.0
php ^7.2|^8.0

requires (dev)
orchestra/testbench ^3.8|^4.0|^5.0|^6.0|^7.0|^8.0
phpunit/phpunit ^8.0|^9.0

Можно даже получить информацию об определённой версии пакета, которая расскажет только о конкретной версии. Если эта версия пакета не установлена необходимо использовать опцию --available или -a для отображения доступных пакетов.

composer show spatie/laravel-web-tinker 1.0.0 -a

Перейти на GitHub-репозиторий/домашнюю страницу пакета

С помощью команды browse осуществляется переход на URL-адрес репозитория или домашнюю страницу пакета в браузере.

$ composer browse spatie/laravel-web-tinker
# Переход к URL-адресу репозитория пакета

$ composer browse spatie/laravel-web-tinker --homepage
# Переход на домашнюю страницу пакета

$ composer browse spatie/laravel-web-tinker --show
# Показать только домашнюю страницу или URL-адрес репозитория

Валидация файла composer.json

Вы можете проверить файл composer.json своего проекта, что поможет найти проблемы в composer.json (если таковые имеются).

composer validate

Например, когда я выполнил команду в своём проекте, то получил следующий результат с несколькими проблемами, такими как использование dev-main в качестве версии для некоторых пакетов, чего следует избегать.

./composer.json is valid for simple usage with composer but has
strict errors that make it unable to be published as a package:
See https://getcomposer.org/doc/04-schema.md for details on the schema
name : The property name is required
description : The property description is required
require.composer/composer : unbound version constraints (dev-master) should be avoided

Поиск устаревших пакетов

Если вы поддерживаете все свои зависимости в актуальном состоянии, вы можете следить за устаревшими зависимостями с помощью команды outdated, например, так.

composer outdated

В нем будут перечислены все устаревшие зависимости, как показывает composer, со следующим цветовым кодированием:

Получение информации о финансировании всех пакетов

Если вы когда-нибудь заинтересуетесь финансированием/пожертвованием для ваших любимых пакетов, вы можете получить все ссылки на финансирование из установленных зависимостей вашего проекта с помощью команды fund.

composer fund

При этом будут показаны все детали финансирования.

The following packages were found in your dependencies which publish funding information:

brianium
paratest
https://github.com/sponsors/Slamdunk
https://paypal.me/filippotessarotto

brick
math
https://github.com/sponsors/BenMorel

doctrine
inflector, lexer
https://www.doctrine-project.org/sponsorship.html
https://www.patreon.com/phpdoctrine
inflector
https://tidelift.com/funding/github/packagist/doctrine%2Finflector
lexer
https://tidelift.com/funding/github/packagist/doctrine%2Flexer

dragonmantank
cron-expression
https://github.com/sponsors/dragonmantank

egulias
email-validator
https://github.com/sponsors/egulias

fidry
cpu-core-counter
https://github.com/sponsors/theofidry

Самообновление Composer из Composer

Наконец, обновить composer до последней версии можно даже из самого composer. Чтобы обновить сам Composer до последней версии, выполните команду self-update. Она заменит ваш composer.phar на последнюю версию.

composer self-update

Если вы хотите обновить Composer до стабильной версии, то можно использовать команду --stable, как показано выше. Это рекомендуемый способ обновления Composer.

composer self-update --stable

В заключение

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

До следующего раза!

Дополнительные материалы

Предыдущая Статья

Защита frontend приложений с помощью CORS и CSP

Следующая Статья

Laravel: Глубокое погружение в FormRequest