Composer — это инструмент для управления зависимостями в PHP. Он
позволяет вам объявить библиотеки, от которых зависит ваш проект, и он
будет устанавливать и обновлять их за вас. Мы узнаем:
- как установить Composer
- использовать его в новом или существующем проекте
- Introduction
- Введение
- Введение
- Предпосылки
- Шаг 4 — Включение скрипта автозагрузки
- Prerequisites
- Шаг 3 — Использование Composer в PHP проекте
- Шаг 2 — Загрузка и установка Composer
- Шаг 4 — Включение скрипта автозагрузки
- Шаг 5 — Обновление зависимостей проекта
- Версия PHP
- Шаг 1 — Установка PHP и необходимых зависимостей
- Тестирование новых версий
- Предварительные требования
- Шаг 2 — Загрузка и установка Composer
- Step 3 — Generating the composer. json File
- Searching for Packages on Packagist
- Требуется пакет
- Понимание ограничений версии
- Упаковщик. org — глобальный репозиторий
- Что если нам не нужен центральный репозиторий
- Шаг 5 — Обновление зависимостей проекта
- Шаг 4 — Включение скрипта автозагрузки
- Использование Composer в проекте PHP
- Ложные отчеты
- Предварительные требования
- Шаг 1 — Установка зависимостей
- Обновите систему
- Автозагрузка
- Установите PHP 8
- Команды вызова
- Шаг 3 — Использование Composer в проекте PHP
- Конфигурация
- Обновление пакетов до последних версий
- Установка
- Windows
- Linux, macOS
- Использование в существующем проекте
- Step 2 — Downloading and Installing Composer
- Создание нового проекта
- Step 5 — Updating the Project Dependencies
- Заключение
- Conclusion
- Заключение
- Отправьте благодарность
- Step 1 — Installing the Dependencies
Introduction
Composer
is a popular dependency management tool for PHP, created mainly to facilitate installation and updates for project dependencies. It will check which other packages a specific project depends on and install them for you, using the appropriate versions according to the project requirements.
This tutorial will show how to install and get started with Composer on an Ubuntu 14.04 server.
Предыдущая версия данного обучающего руководства была написана Бренненом Бернсом
.
Введение
Composer
— это популярный менеджер зависимостей PHP, который упрощает процесс установки и обновления зависимостей
проекта. Он проверяет, от каких прочих пакетов зависит конкретный проект, а затем устанавливает все необходимые версии пакетов в соответствии с требованиями.
Данное руководство поможет установить и начать работу с Composer на сервере Ubuntu 16.04.
Введение
Composer
— это популярный менеджер зависимостей PHP, который упрощает процесс установки и обновления зависимостей проекта. Он проверяет, от каких прочих пакетов зависит конкретный проект, а затем устанавливает все необходимые версии пакетов в соответствии с требованиями. Composer также часто используется для загрузки новых проектов на основе популярных инфраструктур PHP, таких как Symfony
и Laravel
.
Данное руководство поможет установить и начать работу с Composer на сервере Ubuntu 20.04.
Предпосылки
- Сервер с Ubuntu 22.04 в качестве ОС
- Права пользователя: пользователь root или обычный пользователь с привилегиями sudo
Шаг 4 — Включение скрипта автозагрузки
Поскольку PHP не загружает классы автоматически, Composer предоставляет скрипт автозагрузки, который можно включить в ваш проект, чтобы использовать автозагрузку бесплатно. Это значительно упрощает работу с зависимостями.
Вам нужно будет только включить файл vendor/autoload.php
в скрипты PHP перед созданием экземпляра любого класса. Composer автоматически генерирует этот файл при добавлении первой зависимости.
Давайте попробуем сделать это в нашем приложении. Создайте файл test.php
и откройте его в текстовом редакторе:
- test.php
Добавьте следующий код, который будет подключать файл vendor/autoload.php
, загружать зависимость cocur/slugify
и использовать ее для создания понятной человеку части URL-адреса:
Сохраните файл и закройте редактор.
- php test.php
Вы должны получить вывод hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
.
Зависимости нуждаются в обновлениях при выходе новых версий, так что давайте рассмотрим, как решить эту проблему.
Prerequisites
For this tutorial, you will need:
- A server running Ubuntu 14.04
- Access to the server as a regular user with sudo permission
Шаг 3 — Использование Composer в PHP проекте
PHP проекты часто зависят от внешних библиотек, и управление этими зависимостями и их версиями может вызывать затруднения. Composer решает эту проблему, отслеживая ваши зависимости и упрощая для других установку этих зависимостей.
Чтобы использовать Composer в вашем проекте, вам потребуется файл composer.json
. Файл composer.json
указывает Composer, какие зависимости для вашего проекта нужно загрузить, а также какие версии каждого пакета можно использовать. Это очень важно для сохранения последовательности вашего проекта и отказа от установки нестабильных версий, которые могут вызывать проблемы с обратной совместимостью.
Вам не нужно создавать этот файл вручную, потому что вы можете легко допустить ошибку в синтаксисе. Composer автоматически генерирует файл composer.json
, когда вы добавляете в ваш проект зависимость с помощью команды require
. Вы можете добавлять дополнительные зависимости таким же образом без необходимости вручную изменять файл.
Использование Composer для установки пакета в качестве зависимости в проект подразумевает следующие шаги:
- Определите, какая библиотека необходима приложению.
- Изучите подходящую библиотеку из открытого источника на Packagist.org
, официальном репозитории пакетов для Composer. - Выберите пакет, который вы будете использовать в качестве зависимости.
- Запустите
composer require
, чтобы включить зависимость в файлcomposer.json
и установить пакет.
Давайте попробуем сделать это на примере демо-приложения.
Приложение преобразует указанное предложение в понятную человеку часть URL-адреса (slug)
. Как правило, подобные приложения используются для преобразования названия страницы в URL-адрес (например, последняя часть URL для данного обучающего руководства).
Начнем с создания директории для нашего проекта. Мы назовем его slugify
.
- ~
- slugify
- slugify
Теперь нужно найти на Packagist.org
пакет, который поможет нам генерировать понятные человеку части URL-адреса
. При поиске термина «slug» на Packagist вы получите примерно такой результат:
Вы увидите два числа с правой стороны каждого пакета в списке. Число сверху указывает на количество установок пакета, а число внизу показывает, какие оценки пакету ставили на GitHub
. Вы можете изменить порядок результатов поиска на основе этих чисел (посмотрите на два значка с правой стороны панели поиска). Как правило, пакеты с большим количеством установок и большим количеством звезд более стабильны, потому что многие люди их используют. Также важно проверить описание пакета на соответствие тому, что вам нужно.
Нам нужен простой конвертер из строки в понятную человеку часть URL-адреса. Судя по результатам поиска пакет cocur/slugify
кажется наиболее подходящим вариантом с большим количеством установок и звезд (Пакет расположен ниже в результатах поиска, чем видно на скриншоте).
Пакеты на Packagist имеют имя автора
и имя пакета.
Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который использует GitHub для своих репозиториев в форме автор/пакет
. Библиотека, которую мы хотим установить, использует пространство имен cocur/slugif
. Вам нужно пространство имен, чтобы использовать пакет в вашем проекте.
Теперь, когда вы знаете, какой пакет хотите установить, запустите composer require
, чтобы использовать его в качестве зависимости, а также сгенерировать файл composer.json
для проекта:
- require cocur/slugify
Вы увидите следующий вывод, когда Composer загрузит зависимость:
Using version ^3.1 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cocur/slugify (v3.1): Downloading (100%)
Writing lock file
Generating autoload files
Как видите, Composer автоматически определил, какую версию пакета использовать. Если вы сейчас проверите каталог вашего проекта, он будет содержать два новых файла: composer.json
и composer.lock
, а также каталог vendor
.
-
total 12
-rw-rw-r-- 1 sammy sammy 59 Jul 11 16:40 composer.json
-rw-rw-r-- 1 sammy sammy 2934 Jul 11 16:40 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Jul 11 16:40 vendor
Файл composer.lock
используется для хранения информации о том, какие версии каждого пакета установлены, а также для использования одних и тех же версий пакетов, если кто-либо будет клонировать ваш проект и устанавливать зависимости. Каталог vendor
служит местом расположения зависимостей проекта. Папка vendor
не обязательно будет использоваться для контроля версий, вы должны поместить туда только файлы composer.json
и composer.lock
.
При установке проекта, который уже содержит файл composer.json
, запустите composer install
, чтобы загрузить зависимости проекта.
Давайте быстро пробежимся по ограничениям версии. Если вы просмотрите содержимое файла composer.json
, то увидите следующее:
- composer.json
sam
Вы можете заметить специальный символ ^
перед номером версии в файле composer.json
. Composer поддерживает несколько ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и одновременно сохранить стабильность вашего проекта. Оператор карет ( ^
), используемый в автоматически генерируемом файле composer.json
, рекомендуется применять для обеспечения максимальной совместимости в соответствии с семантическим управлением версиями
. В данном случае он определяет 3.1
в качестве минимальной совместимой версии и позволяет обновляться до любой будущей версии ниже 4.0
.
Как правило, вам не нужно изменять ограничения версии в файле composer.json
. Однако в некоторых ситуациях может потребоваться вручную отредактировать ограничения для экземпляра, например, при выходе крупного обновления требуемой библиотеки, а также в случае, когда библиотека, которую вы хотите использовать, не соответствует требованиям семантического управления версиями.
Ниже представлены примеры, которые помогут лучше понять, как работают ограничения версии в Composer:
Более подробное описание ограничений версии в Composer см. в официальной документации
.
Теперь нужно рассмотреть, как автоматически загружать зависимости с помощью Composer.
Шаг 2 — Загрузка и установка Composer
Composer предоставляет написанный на PHP скрипт installer
. Мы должны загрузить его, убедиться, что он не поврежден, а затем использовать его для установки Composer.
Убедитесь, что вы находитесь в домашней директории, а затем загрузите установщик с помощью curl
:
- ~
- https://getcomposer.org/installer composer-setup.php
Далее мы убедимся, что хэш установщика совпадает с хэшем SHA-384 для последней версии установщика на странице Composer Public Keys / Signatures
. Чтобы упростить проверку, вы можете использовать следующую команду для программного получения последней версии хэша со страницы Composer и ее сохранения в переменной оболочки:
- https://composer.github.io/installer.sig
Для проверки полученного значения можно использовать следующую команду:
-
e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a
Теперь выполните следующий код PHP, приведенный на странице загрузки
Composer, чтобы подтвердить безопасность запуска скрипта установки:
- php
Вывод должен выглядеть так:
Installer verified
Если вы увидите сообщение Installer corrupt
, вам нужно повторно загрузить скрипт установки и еще раз убедиться, что вы используете правильный хэш. Затем повторите процедуру проверки. После успешной проверки установщика вы можете продолжить.
Чтобы выполнить глобальную установку composer
, используйте следующую команду, которая выполнит загрузку и установку Composer в качестве общесистемной команды composer
в каталоге /usr/local/bin
:
- php composer-setup.php --install-dir/usr/local/bin composer
Вывод будет выглядеть следующим образом:
All settings correct for using Composer
Downloading...
Composer (version 1.10.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Чтобы протестировать установку, запустите команду:
-
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.10.5 2020-04-10 11:44:22
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
--no-cache Prevent use of the cache
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
...
Это подтверждает, что диспетчер зависимостей Composer был успешно установлен и доступен в рамках всей системы.
Примечание:
если вы предпочитаете иметь отдельные исполняемые модули Composer для каждого проекта, который вы размещаете на этом сервере, вы можете выполнить установку локально для каждого проекта. Этот метод также полезен, когда системный пользователь не имеет прав на установку программного обеспечения в рамках всей системы.
Для этого воспользуйтесь командой php composer-setup.php
. В текущем каталоге будет сгенерирован файл composer.phar
, который можно будет запустить с помощью команды php composer.phar
.
А теперь давайте рассмотрим использование Composer для управления
Шаг 4 — Включение скрипта автозагрузки
Поскольку PHP не загружает классы автоматически, Composer предоставляет скрипт автозагрузки, который можно включить в ваш проект, чтобы использовать в нем автозагрузку. Composer автоматически генерирует этот файл при добавлении первой зависимости.
Вам нужно будет только включить файл vendor/autoload.php
в скрипты PHP перед созданием экземпляра любого класса.
Протестируем его в нашем демонстрационном приложении. Откройте в текстовом редакторе новый файл с именем test.php
:
- test.php
Добавьте следующий код, который будет подключать файл vendor/autoload.php
, загружать зависимость cocur/slugify
и использовать ее для создания понятной человеку части URL-адреса:
Сохраните файл и закройте редактор.
- php test.php
Вы должны получить вывод hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
.
Зависимости нуждаются в обновлениях при выходе новых версий, так что давайте рассмотрим, как решить эту проблему.
Шаг 5 — Обновление зависимостей проекта
Если вам нужно обновить зависимости проекта на более поздние версии, запустите команду update
:
- update
Она будет проверять новые версии библиотек, которые требуются вам в вашем проекте. Если будет найдена новая версия, которая совместима с ограничением версии, определенным в файле composer.json
, Composer заменит ранее установленную версию на новую. Файл composer.lock
будет обновлен, чтобы отразить эти изменения.
Вы также можете обновить одну или несколько конкретных библиотек, указав их следующим образом:
- update vendor/package vendor2/package2
Обязательно проверьте файлы composer.json
и composer.lock
после обновления зависимостей, чтобы другие тоже могли установить обновленные версии.
Версия PHP
Composer всегда устанавливает версии пакетов, совместимые с версией PHP,
которую вы используете в данный момент (точнее, версию PHP, используемую
в командной строке при запуске Composer). А это, скорее всего, не та версия,
которую использует ваш веб-хост. Поэтому очень важно добавить
информацию о версии PHP на вашем хостинге в файл composer.json
. После
этого будут установлены только версии пакетов, совместимые с хостом.
Например, чтобы настроить проект для работы на PHP 8.2.3, используйте
команду:
composer config platform.php 8.2.3
Таким образом версия записывается в файл composer.json
:
{
"config": {
"platform": {
"php": "8.2.3"
}
}
}
Однако номер версии PHP также указывается в другом месте файла, в
секции require
. В то время как первое число указывает версию, для
которой будут установлены пакеты, второе число говорит о том, для какой
версии написано само приложение. ( Конечно, нет смысла в том, чтобы эти
версии были разными, поэтому двойная запись является излишеством). Вы
устанавливаете эту версию с помощью команды:
composer require php 8.2.3 --no-update
Или непосредственно в файле composer.json
:
{
"require": {
"php": "8.2.3"
}
}
Шаг 1 — Установка PHP и необходимых зависимостей
В дополнение к зависимостям, уже входящим в комплект системы Ubuntu 20.04, таким как git
и curl
, Composer требует php-cli
для выполнения скриптов PHP в командной строке и unzip
для распаковки архивов. Сейчас мы установим эти зависимости.
Во-первых, необходимо обновить кэш менеджера пакетов:
- update
Запустите следующую команду для установки требуемых пакетов:
- php-cli
Для подтверждения установки введите Y
и нажмите ENTER
.
После установки обязательных компонентов можно переходить к установке Composer.
Тестирование новых версий
Вы хотите протестировать новую версию пакета. Как это сделать?
Во-первых, добавьте эту пару опций в файл composer.json
, которая
позволит вам устанавливать версии пакетов для разработки, но сделает
это только в том случае, если нет стабильной версии, отвечающей
требованиям:
{
"minimum-stability": "dev",
"prefer-stable": true,
}
Мы также рекомендуем удалить файл composer.lock
, потому что иногда
Composer непонятным образом отказывается устанавливаться, и это решит
проблему.
Допустим, пакет – nette/utils
и новая версия – 4.0. Вы
устанавливаете его с помощью команды:
composer require nette/utils:4.0.x-dev
Или вы можете установить конкретную версию, например, 4.0.0-RC2:
composer require nette/utils:4.0.0-RC2
Если другой пакет зависит от библиотеки и заблокирован на более
старую версию (например, ^3.1
), идеально будет обновить пакет для
работы с новой версией. Однако если вы просто хотите обойти
ограничение и заставить Composer установить версию разработки и
притвориться, что это старая версия (например, 3.1.6), вы можете
использовать ключевое слово as
:
composer require nette/utils "4.0.x-dev as 3.1.6"
Предварительные требования
Для прохождения этого обучающего модуля вам потребуется доступ к серверу Ubuntu 20.04 на уровне sudo
без привилегий root и включенный на сервере брандмауэр. Чтобы выполнить настройку, воспользуйтесь руководством по первоначальной настройке сервера Ubuntu 20.04
.
Шаг 2 — Загрузка и установка Composer
Composer предоставляет написанный на PHP установщик
. Мы должны загрузить его, убедиться, что он не поврежден, а затем использовать его для установки Composer.
Убедитесь, что вы находитесь в домашней директории, а затем загрузите установщик с помощью curl
:
- ~
- https://getcomposer.org/installer composer-setup.php
Затем убедитесь, что хэш установщика совпадает с хэшем SHA-384 для последней версии установщика на странице Composer Public Keys / Signatures
. Скопируйте хэш с этой страницы и сохраните его в качестве переменной командной строки:
- 544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061
Обязательно замените последний хэш на выделенное красным значение.
Теперь выполните следующий PHP скрипт, чтобы убедиться, что скрипт установки безопасен для запуска:
- php
Вы должны увидеть следующий вывод:
Installer verified
Если вы увидите Installer corrupt
, вам нужно снова загрузить скрипт установки и повторно убедиться, что вы используете правильный хэш. Запустите команду и снова проверьте установщик. После успешной проверки установщика вы можете продолжить.
Чтобы выполнить глобальную установку composer
, используйте следующую команду, которая выполнит загрузку и установку Composer в качестве общесистемной команды composer
в каталоге /usr/local/bin
:
- php composer-setup.php --install-dir /usr/local/bin
composer
Вывод должен выглядеть так:
All settings correct for using Composer
Downloading...
Composer (version 1.6.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Чтобы протестировать установку, запустите команду:
-
Вы должны получить подобный вывод с версией и аргументами Composer.
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.6.5 2018-05-04 11:44:59
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .
Это значит, что менеджер зависимостей Composer был успешно установлен и доступен в рамках всей системы.
Примечание:
если вы предпочитаете иметь отдельные исполняемые модули Composer для каждого проекта, который вы размещаете на этом сервере, вы можете выполнить установку локально для каждого проекта. Пользователи NPM должны быть знакомы с данным подходом. Этот метод также полезен, когда системный пользователь не имеет прав на установку программного обеспечения в рамках всей системы.
Для этого воспользуйтесь командой php composer-setup.php
. В результате будет сгенерирован файл composer.phar
в текущей директории, который можно исполнить с помощью команды ./composer.phar
.
А теперь давайте рассмотрим использование Composer для управления
Step 3 — Generating the composer. json File
In order to use Composer in your project, you’ll need a composer.json
file. The composer.json
file basically tells Composer which dependencies it needs to download for your project, and which versions of each package are allowed to be installed. This is extremelly important to keep your project consistent and avoid installing unstable versions that could potentially cause backwards compatibility issues.
You don’t need to create this file manually — it’s easy to run into syntax errors when you do so. Composer auto-generates the composer.json
file when you add a dependency to your project using the require
command. Additional dependencies can also be added in the same way, without the need to manually edit this file.
- Identify what kind of library the application needs
- Research a suitable open source library on Packagist.org
, the official repository for Composer - Choose the package you want to depend on
- Run
composer require
to include the dependency in thecomposer.json
file and install the package
We’ll see how this works in practice with a simple demo application.
The goal of this application is to transform a given sentence into a URL-friendly string — a slug
. This is commonly used to convert page titles to URL paths (like the final portion of the URL for this tutorial).
Let’s start by creating a directory for our project. We’ll call it slugify
:
- ~
- slugify
- slugify
Searching for Packages on Packagist
Now it’s time to search Packagist.org
for a package that can help us generating slugs
. If you search for the term “slug” on Packagist, you’ll get a result similar to this:
You’ll see two numbers on the right side of each package in the list. The number on the top represents how many times the package was installed, and the number on the bottom shows how many times a package was starred on GitHub. You can reorder the search results based on these numbers (look for the two icons on the right side of the search bar). Generally speaking, packages with more installations and more stars tend to be more stable, since so many people are using them. It’s also important to check the package description for relevance — is that really what you are looking for?
What we need is a simple string-to-slug converter. From the search results, the package cocur/slugify
seems to be a good match, with a reasonable amount of installations and stars. ( The package is a bit further down the page than the screenshot shows.)
You will notice that the packages on Packagist have a vendor
name and a package
name. Each package has a unique identifier (a namespace) in the same format Github uses for its repositories: vendor/package
. The library we want to install uses the namespace cocur/slugify
The namespace is what we need in order to require the package in our project.
Требуется пакет
Теперь, когда мы точно знаем, какой пакет мы хотим установить, мы можем запустить composer require
включить его как зависимость, а также сгенерировать composer.json
файл для проекта:
- требуют cocur/slugify
Using version ^1.3 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing cocur/slugify (v1.3)
Downloading: 100%
Writing lock file
Generating autoload files
Как видно из вывода, Composer автоматически решил, какую версию пакета следует использовать. Если вы сейчас проверите каталог вашего проекта, он будет содержать два новых файла: composer.json
и composer.lock
, и vendor
справочник:
-
total 12
-rw-rw-r-- 1 sammy sammy 59 Sep 9 16:22 composer.json
-rw-rw-r-- 1 sammy sammy 2835 Sep 9 16:22 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Sep 9 16:22 vendor
composer.lock
используется для хранения информации о том, какие версии каждого пакета установлены, и убедитесь, что те же версии используются, если кто-то другой клонирует ваш проект и устанавливает его зависимости. vendor
каталог, где находятся зависимости проекта. vendor
папка должна не
быть зафиксированным в системе контроля версий — вам нужно только включить composer.json
и composer.lock
файлы.
При установке проекта, который уже содержит composer.json
файл, нужно запустить composer install
для загрузки зависимостей проекта.
Понимание ограничений версии
Если вы проверите содержимое вашего composer.json
файл, вы увидите что-то вроде этого:
- composer.json
-
-
-
Вот несколько примеров, которые помогут вам лучше понять, как работают ограничения версии Composer:
Для более подробного ознакомления с ограничениями версий Composer см. их официальную документацию
.
Упаковщик. org — глобальный репозиторий
Упаковщик
— это тянуть пакеты, куда
Композитор пытается искать пакеты, если не сказано иначе. Вы также можете
опубликовать здесь свои собственные пакеты.
Что если нам не нужен центральный
репозиторий
которые не могут быть размещены публично на Packagist, мы можем создать
собственные репозитории для проектов.
Подробнее о репозиториях в официальной
документация
.
Шаг 5 — Обновление зависимостей проекта
Если вам нужно обновление проекта на более позднюю версию, загрузите команду update
:
- обновление
Она будет проверять новые версии библиотек, которые требуются в будущем проекте. Если была найдена новая версия, которая совместима с закрытой версией, обнаружена в файле composer.json
, Композитор заменяет ранее установленную версию на новую. Файл composer.lock
будет обновлено, чтобы отразить эти изменения.
- update vendor/package vendor2/package2
Обязательно зарегистрируйте файлы composer.json
и composer.lock
в системе контроля версий после обновления зависимостей, чтобы другие также могли установить обновленные версии.
Шаг 4 — Включение скрипта автозагрузки
Composer также предоставляет скрипт автозагрузки, который вы можете включить в свой проект, чтобы получить автозагрузку бесплатно. Это значительно упрощает работу с вашими зависимостями и определение ваших собственных пространств имен.
Единственное, что вам нужно сделать, это включить vendor/autoload.php
файл в ваших PHP-скриптах перед созданием любого экземпляра класса.
Вернемся к слагифи
пример приложения. Мы создадим test.php
сценарий, в котором мы будем использовать cocur/slugify
библиотека:
- test.php
Вы можете запустить скрипт в командной строке с помощью:
- php test.php
Это должно дать результат hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
.
Использование Composer в проекте PHP
Теперь, чтобы использовать Composer в проекте PHP, создайте каталог для своего проекта и добавьте зависимость PHP, используя composer. В этом мы можем использовать пакет Monolog для отправки журналов в файлы, сокеты, базы данных и различные веб-сервисы.
Теперь, чтобы создать каталог monolog и добавить пакет Monolog, запишите конкретное:
mkdir monolog && cd monolog && composer require monolog/monolog
Теперь вы можете перечислить свой каталог, и вы заметили, что в следующем каталоге есть файл composer.json, который имеет пакет monolog в зависимости от качества.
$ cat composer.json
{
"require": {
"monolog/monolog": "^3.2"
}
}
Теперь вы можете добавить следующий код PHP в файл monolog.php, чтобы проверить функциональность monolog.
Чтобы обновить только определенный пакет в вашем проекте PHP, вы можете использовать команду:
composer update vendor/package
Поздравляем! Вы успешно установили Composer на Ubuntu 22.04 и добавили зависимость пакета в файл composer.json.
Если вам понравился этот пост о том, как установить и использовать Composer на Ubuntu 22.04, поделитесь им с друзьями в социальных сетях. Спасибо.
Ложные отчеты
При обновлении пакетов или изменении номеров версий возникают
конфликты. Один пакет имеет требования, которые конфликтуют с другим и
так далее. Однако иногда Composer выдает ложные сообщения. Он сообщает о
конфликте, которого на самом деле не существует. В этом случае следует
удалить файл composer.lock
и повторить попытку.
Если сообщение об ошибке не исчезает, значит, оно имеет серьезное
значение, и вам нужно прочитать из него, что и как нужно изменить.
Предварительные требования
Для данного обучающего руководства вам потребуется следующее:
Шаг 1 — Установка зависимостей
Прежде чем приступить к загрузке и установке Composer, нужно убедиться, что на сервере установлены все зависимости.
Во-первых, необходимо обновить кэш менеджера пакетов:
- update
Теперь мы установим зависимости. Нам потребуется curl
, чтобы загрузить Composer, и php-cli
для установки и запуска. Пакет php-mbstring
необходим для предоставления функций для библиотеки, которую мы будем использовать. git
используется Composer для загрузки зависимостей проекта, а unzip
для извлечения заархивированных пакетов. Все пакеты можно установить при помощи следующей команды:
- php-cli php-mbstring
После установки всех обязательных пакетов мы можем переходить к установке Composer.
Обновите систему
Свежая установка Ubuntu 22.04 требует обновления пакетов до последних доступных версий.
sudo apt-get update -y && sudo apt-get upgrade -y
Автозагрузка
Ключевой особенностью Composer является то, что он обеспечивает
автозагрузку для всех устанавливаемых классов, которую вы запускаете
путем включения файла vendor/autoload.php
.
Однако можно также использовать Composer для загрузки других классов вне
папки vendor
. Первый вариант — позволить Composer просканировать
определенные папки и подпапки, найти все классы и включить их в
автозагрузку. Для этого установите autoload > classmap
в файле
composer.json
:
{
"autoload": {
"classmap": [
"src/", # включает папку src/ со всеми вложенными директориями
]
}
}
Впоследствии необходимо выполнять команду composer dumpautoload
при
каждом изменении и позволять таблицам автозагрузки регенерироваться.
Это крайне неудобно, и гораздо лучше доверить эту задачу RobotLoader
, который выполняет ту же самую работу
автоматически в фоновом режиме и гораздо быстрее.
Второй вариант — следовать PSR-4
. Проще
говоря, это система, в которой пространства имен и имена классов
соответствуют структуре каталогов и именам файлов, т. е.
App\Router\RouterFactory
находится в файле /path/to/App/Router/RouterFactory.php
.
Пример конфигурации:
{
"autoload": {
"psr-4": {
"App\\": "app/" # пространство имён App\ указывает на директорию app/
}
}
}
Как именно настроить это поведение, смотрите в документации Composer
.
Установите PHP 8
Ubuntu 22.04 поставляется с PHP 8.1 в качестве версии PHP по умолчанию. Запустите эту команду ниже, чтобы установить PHP 8.1 и его необходимые расширения.
sudo apt install php-cli unzip
Composer устанавливается с помощью сценария composer-setup.php, который мы сначала загрузим в /tmp, проверим его, а затем запустим сценарий для установки Composer.
Сначала запустите команду для загрузки скрипта в /tmp/composer-setup.php:
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
Далее мы получим подпись Composer и сохраним ее в системной переменной HASH с помощью:
HASH=`curl -sS https://composer.github.io/installer.sig`
Теперь, чтобы убедиться, что сценарий установки безопасен для запуска, выполните следующий код:
php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Если вы получаете этот вывод, установка безопасна для запуска.
Установщик проверен
Теперь вы можете выполнить скрипт установки, который мы ранее загрузили в /tmp/composer-setup.php, чтобы установить composer для всей системы в каталог /usr/local/bin с помощью команды:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Чтобы проверить, прошла ли установка успешно, просто запустите:
composer
Composer также можно установить локально в каталог проекта или в домашний каталог пользователя. Например, если вы хотите установить Composer в домашний каталог пользователя dev, вам нужно будет перейти в его каталог и выполнить следующую команду от имени пользователя dev.
curl -sS https://getcomposer.org/installer | php
Теперь вы можете запустить composer командой:
php composer.phar
И вы получите такой же результат, как и раньше.
Команды вызова
Вы можете вызывать свои собственные пользовательские команды и
сценарии через Composer, как если бы это были родные команды Composer. Скриптам,
расположенным в папке vendor/bin
, не нужно указывать эту папку.
В качестве примера мы определяем сценарий в файле composer.json
,
который использует Nette Tester
для запуска
тестов:
{
"scripts": {
"tester": "tester tests -s"
}
}
Затем мы запускаем тесты с помощью composer tester
. Мы можем вызвать
команду, даже если находимся не в корневой папке проекта, а в
подкаталоге.
Шаг 3 — Использование Composer в проекте PHP
PHP проекты часто зависят от внешних библиотек, и управление этими зависимостями и их версиями может вызывать затруднения. Composer решает эту проблему посредством отслеживания версий и зависимостей проектов, а также упрощает процесс поиска, установки и обновления пакетов, требуемых для проекта.
Чтобы использовать Composer в вашем проекте, вам потребуется файл composer.json
. Файл composer.json
указывает Composer, какие зависимости для вашего проекта нужно загрузить, а также какие версии каждого пакета можно использовать. Это очень важно для сохранения последовательности вашего проекта и отказа от установки нестабильных версий, которые могут вызывать проблемы с обратной совместимостью.
Вам не нужно создавать этот файл вручную, потому что при этом можно легко допустить ошибку в синтаксисе. Composer предлагает интерактивный способ создания нового файла composer.json
на основе ввода пользователя. Этот вариант будет полезным, если вы захотите опубликовать свой проект как общедоступный пакет в Packagist
. Также Composer автоматически генерирует чистый файл composer.json
при запуске команды composer require
для добавления зависимости в новом проекте.
Использование Composer для установки пакета в качестве зависимости в проект подразумевает следующие шаги:
- Определите, какая библиотека необходима приложению.
- Изучите подходящую библиотеку из открытого источника на Packagist.org
, официальном репозитории пакетов для Composer. - Выберите пакет, который вы будете использовать в качестве зависимости.
- Запустите
composer require
, чтобы включить зависимость в файл composer.json
и установить пакет.
Давайте попробуем сделать это на примере демо-приложения.
Приложение преобразует указанное предложение в понятную человеку часть URL-адреса (slug)
. Как правило, подобные приложения используются для преобразования названия страницы в URL-адрес (например, последняя часть URL для данного обучающего руководства).
Начнем с создания директории для нашего проекта. Мы назовем его slugify
.
- ~
- slugify
- slugify
Хотя это не требуется, вы можете запустить команду composer init
для создания детального файла composer.json
для вашего проекта. Поскольку единственная цель нашего проекта — продемонстрировать установку зависимостей на Composer, мы используем более простой файл composer.json
, который будет сгенерирован автоматически, когда нам потребуется наш первый пакет.
Теперь нужно найти на Packagist.org
пакет, который поможет нам генерировать понятные человеку части URL-адреса
. При поиске термина «slug» на Packagist вы получите примерно такой результат:

Вы увидите два числа с правой стороны каждого пакета в списке. Число сверху указывает на количество установок пакета через Composer, а число внизу показывает, какие оценки пакету ставили на GitHub. Как правило, пакеты с большим количеством установок и большим количеством звезд более стабильны, потому что многие люди их используют. Также важно проверить описание пакета на соответствие тому, что вам нужно.
Нам нужен конвертер из строки в понятную человеку часть URL-адреса
. Среди результатов поиска хорошо подходит пакет cocur/slugify
, отображаемый на первой строке, для которого указано существенное количество установок и звезд.
Пакеты на Packagist имеют имя автора
и имя пакета
. Каждый пакет имеет уникальный идентификатор (пространство имен) в том же формате, который использует GitHub для своих репозиториев: vendor/package
. Библиотека, которую мы хотим установить, использует пространство имен cocur/slugify
. Для ее указания в вашем проекте требуется пространство имен пакета.
Теперь, когда вы знаете, какой пакет хотите установить, запустите composer require
, чтобы добавить его в качестве зависимости, а также сгенерировать файл composer.json
для вашего проекта. При запросе пакетов важно учитывать, что Composer отслеживает как зависимости на уровне приложений, так и зависимости на уровне системы. Зависимости на уровне системы важны, чтобы показать, на какие модули PHP полагается пакет. Для пакета cocur/slugify
требуется модуль PHP, который мы еще не установили.
Если требуемый пакет использует системную библиотеку, которая еще не установлена на вашем сервере, вы получите сообщение об ошибке с указанием невыполненного требования:
- require cocur/slugify
Using version ^4.0 for cocur/slugify
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for cocur/slugify ^4.0 -> satisfiable by cocur/slugify[v4.0.0].
- cocur/slugify v4.0.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
...
Для решения проблемы с системной зависимостью мы можем выполнить поиск отсутствующего пакета с помощью apt search
:
- search mbstring
Sorting... Done
Full Text Search... Done
php-mbstring/focal 2:7.4+75 all
MBSTRING module for PHP [default]
php-patchwork-utf8/focal 1.3.1-1 all
UTF-8 strings handling for PHP
php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64
MBSTRING module for PHP
Определив правильное имя пакета, вы можете использовать apt
еще раз для установки системной зависимости:
- php-mbstring
После завершения установки вы можете запустить команду composer require
еще раз:
- require cocur/slugify
Using version ^4.0 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cocur/slugify (v4.0.0): Downloading (100%)
Writing lock file
Generating autoload files
Как видите, Composer автоматически определил, какую версию пакета использовать. Если вы сейчас проверите каталог вашего проекта, он будет содержать два новых файла: composer.json
и composer.lock
, а также каталог vendor
.
-
total 12
-rw-rw-r-- 1 sammy sammy 59 May 4 13:56 composer.json
-rw-rw-r-- 1 sammy sammy 3229 May 4 13:56 composer.lock
drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor
Файл composer.lock
используется для хранения информации о том, какие версии каждого пакета установлены, а также для использования одних и тех же версий пакетов, если кто-либо будет клонировать ваш проект и устанавливать зависимости. Каталог vendor
служит местом расположения зависимостей проекта. Папка vendor
не обязательно должна использоваться для контроля версий, в нее следует поместить только файлы composer.json
и composer.lock
.
При установке проекта, который уже содержит файл composer.json
, запустите composer install
, чтобы загрузить зависимости проекта.
Давайте быстро пробежимся по ограничениям версии. Если вы просмотрите содержимое файла composer.json
, то увидите следующее:
- composer.json
Вы можете заметить специальный символ ^
перед номером версии в файле composer.json
. Composer поддерживает несколько ограничений и форматов для определения требуемой версии пакета, чтобы обеспечить гибкость и одновременно сохранить стабильность вашего проекта. Оператор карет ( ^
), используемый в автоматически генерируемом файле composer.json
, рекомендуется применять для обеспечения максимальной совместимости в соответствии с семантическим управлением версиями
. В данном случае он определяет 4.0
в качестве минимальной совместимой версии и позволяет обновляться до любой будущей версии ниже 5.0
.
Как правило, вам не нужно изменять ограничения версии в файле composer.json
. Однако в некоторых ситуациях может потребоваться вручную отредактировать ограничения для экземпляра, например, при выходе крупного обновления требуемой библиотеки, а также в случае, когда библиотека, которую вы хотите использовать, не соответствует требованиям семантического управления версиями.
Ниже представлены примеры, которые помогут лучше понять, как работают ограничения версии в Composer:
Более подробное описание ограничений версии в Composer см. в официальной документации
.
Теперь нужно рассмотреть, как автоматически загружать зависимости с помощью Composer.
Конфигурация
Composer тесно интегрирован с инструментом контроля версий Git
. Если вы не используете Git, необходимо сообщить об
этом Composer:
composer -g config preferred-install dist
Обновление пакетов до последних версий
Для обновления всех используемых пакетов до последней версии в
соответствии с ограничениями версий, определенными в файле
composer.json
, используйте команду composer update
. Например, для
зависимости "nette/database": "^3.0"
будет установлена последняя версия
3.x.x, но не версия 4.
Чтобы обновить ограничения версии в файле composer.json
на,
например, “nette/database”:
“^4.1” , для установки последней версии, используйте команду `composer require nette/database
.
Чтобы обновить все используемые пакеты Nette, необходимо перечислить
их все в командной строке, например:
composer require nette/application nette/forms latte/latte tracy/tracy ...
Что непрактично. Поэтому используйте простой сценарий Composer Frontline
, который сделает это
за вас:
php composer-frontline.php
Установка
Composer — это исполняемый файл .phar
, который вы загружаете и
устанавливаете следующим образом.
Windows
Используйте официальную программу установки Composer-Setup.exe
.
Linux, macOS
Всё, что вам нужно, это 4 команды, которые вы можете скопировать с этой страницы
.
Более того, при копировании в папку, находящуюся в системном
PATH
, Composer становится глобально доступным:
$ mv ./composer.phar ~/bin/composer # или /usr/local/bin/composer
Использование в существующем проекте
Чтобы начать использовать Composer в своем проекте, всё, что вам нужно,
это файл composer.json
. Этот файл описывает зависимости вашего
проекта и может содержать другие метаданные. Самый простой
composer.json
может выглядеть следующим образом:
{
"require": {
"nette/database": "^3.0"
}
}
Здесь мы говорим, что наше приложение (или библиотека) зависит от
пакета nette/database
(имя пакета состоит из имени поставщика и имени
проекта) и ему нужна версия, соответствующая ограничению ^3.0
.
Итак, когда у нас есть файл composer.json
в корне проекта и мы
запускаем:
composer update
Composer загрузит исходные файлы Nette в каталог vendor
. Он также
создает файл composer.lock
, который содержит информацию о том, какие
именно версии библиотек установлены.
Composer генерирует файл vendor/autoload.php
. Вы можете просто включить
этот файл и начать использовать классы, которые предоставляют эти
библиотеки, без лишней работы:
require __DIR__ . '/vendor/autoload.php';
$db = new Nette\Database\Connection('sqlite::memory:');
Step 2 — Downloading and Installing Composer
Composer installation is really simple and can be done with a single command:
- https://getcomposer.org/installer php -- --install-dir/usr/local/bin composer
This will download and install Composer as a system-wide command named composer
, under /usr/local/bin
. The output should look like this:
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
To test your installation, run:
-
And you should get output similar to this:
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.0-dev (9859859f1082d94e546aa75746867df127aa0d9e) 2015-08-17 14:57:00
Usage:
command [options] [arguments]
Options:
--help (-h) Display this help message
--quiet (-q) Do not output any message
--verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version (-V) Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
--no-interaction (-n) Do not ask any interactive question
--profile Display timing and memory usage information
--working-dir (-d) If specified, use the given directory as working directory.
. . .
This means Composer was succesfully installed on your system.
Создание нового проекта
Новый проект Nette можно создать, выполнив простую команду:
composer create-project nette/web-project name-of-the-project
Вместо name-of-the-project
укажите имя каталога для вашего проекта и
выполните команду. Composer получит репозиторий nette/web-project
с GitHub,
который уже содержит файл composer.json
, и сразу после этого установит
сам фреймворк Nette. Осталось только проверить права на
запись
для директорий temp/
и log/
, и вы готовы к работе.
Если вы знаете, на какой версии PHP будет размещен проект, обязательно
установите ее
.
Step 5 — Updating the Project Dependencies
Whenever you want to update your project dependencies, you just need to run the update
command:
- update
This will check for newer versions of the libraries you required in your project. If a newer version is found and it’s compatible with the version constraint defined in the composer.json
file, it will replace the previous version installed. The composer.lock
file will be updated to reflect these changes.
You can also update one or more specific libraries by running:
- update vendor/package vendor2/package2
Заключение
Composer — это мощный инструмент, который должен быть в арсенале каждого разработчика PHP. В этом обучающем руководстве вы установили Composer и использовали его при создании простого проекта. Теперь вы умеете устанавливать и обновлять зависимости.
Помимо обеспечения удобного и надежного способа управления зависимостями проекта, этот инструмент задает новый стандарт для обмена и обнаружения пакетов PHP, созданных сообществом.
Conclusion
Composer is a powerful tool every PHP developer should have in their utility belt.
Beyond providing an easy and reliable way for managing project dependencies, it also establishes a new de facto standard for sharing and discovering PHP packages created by the community.
This tutorial covered the essentials for getting started with Composer on Ubuntu 14.04.
Заключение
Composer — это мощный инструмент, значительно упрощающий управление зависимостями в проектах PHP. Он дает надежный способ обнаружения, установки и обновления пакетов PHP, от которых зависит проект. В этом обучающем модуле мы узнали, как установить Composer, как включить в проект новые зависимости и как обновлять эти зависимости при выходе новых версий.
Отправьте благодарность
Мы покажем вам трюк, который порадует авторов открытых исходников. Вы
можете легко присвоить звезду на GitHub библиотекам, которые использует
ваш проект. Просто установите библиотеку symfony/thanks
:
composer global require symfony/thanks
А потом наберите:
composer thanks
Step 1 — Installing the Dependencies
Before we download and install Composer, we need to make sure our server has all dependencies installed.
First, update the package manager cache by running:
- update
- php5-cli
You can now proceed to the next step.