Менее известные трюки и советы по 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, со следующим цветовым кодированием:
- Зелёный (=): Зависимость находится в последней версии и является актуальной.
- Жёлтый (~): Зависимость имеет новую версию, которая включает в себя нарушения обратной совместимости, согласно semver, поэтому обновляйте её, когда сможете, но это может потребовать дополнительных усилий.
- Красный (!): Зависимость имеет новую версию, совместимую с semver, и вам следует обновить её.
Получение информации о финансировании всех пакетов
Если вы когда-нибудь заинтересуетесь финансированием/пожертвованием для ваших любимых пакетов, вы можете получить все ссылки на финансирование из установленных зависимостей вашего проекта с помощью команды 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. Сообщите мне в комментариях, какая из этих малоизвестных функций понравилась вам больше всего.
До следующего раза!