Composer php. Основы работы с менеджером пакетов

Composer в php — это менеджер пакетов, который позволяет управлять зависимостями библиотек при разработке приложения. С помощью него можно достаточно легко подключать и обновлять новые библиотеки в своем проекте, а также сохранять их версионность.

Композер существует с 2011 года (официальный релиз был в марте 2012). Как идея менеджеры пакетов существуют достаточно давно и авторы композера не скрывают, что при разработке вдохновлялись npm для Node.js и Bundler для Ruby.

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

Проверка наличия php в интерактивной консоли

Первым делом нужно проверить наличие возможности исполнения php кода в консоли вашей системы. Для этого откройте терминал и введите следующую команду:

php --version

Если все в порядке, то вам вернется краткое сведение о версии php, которая у вас установлена:

PHP 7.1.23 (cli) (built: Nov  7 2018 18:20:35) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

В противном случае, вам нужно будет включить исполнение php из консоли, так как последующие команды будут выполняться при помощи терминала.

Установка composer локально

Что бы работать с композером, достаточно скачать composer.phar с официального сайта.

По сути это php-архив в котором располагаются скрипты, позволяющие выполнять определенные команды в консоли, например update, install и прочее.

Итак, для начала в папке с вашим проектом откроем терминал и выполним команды:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php 
php -r "unlink('composer-setup.php');"

Если при исполнении первой команды вы получили предупреждение : «Unable to find the wrapper “https” — did you forget to enable it when you configured PHP?», то нужно в файле php.ini раскомментировать extension=openssl (примерно 919 строка)

Тем самым мы скачаем установщик, который проверит настройки PHP и если все в порядке, то будет скачана актуальная версия composer.phar.

Если из этой же директории выполнить команду php composer.phar, то получим список доступных команд и описание к ним. По сути это все что нужно сделать для установки композера локально.

Установка composer php глобально

Что бы каждый раз не писать вначале командной строки php composer.phar можно вынести композер глобально и пользоваться только командой composer в любом месте вышей системы.

Настройка для macos

В папке проекта, где лежит composer.phar выполните команды:

sudo mv composer.phar /usr/local/bin/
vim ~/.bash_profile

Файл .bash_profile может быть пустым или же вообще отсутствовать. Если это так, то создайте его и добавьте следующую строку:

alias composer="php /usr/local/bin/composer.phar"

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

Проверяем работу командой composer

Настройка для linux (Ubuntu)

Скачиваем установочный скрипт в любую директорию

curl -sS https://getcomposer.org/installer -o composer-setup.php

И устанавливаем композер в папку bin:

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Проверяем работу выполнив команду composer

Настройка для windows

Процесс установки достаточно прост и ничем не отличает от установки обычной программы под windows.

Для этого нужно скачать установщик с официального сайта по ссылке. В процессе установки, важно указать правильный путь к интерпретатору php, у меня он находится по следующему пути C:\php\php.exe

Так же после установки не забудьте перезапустить терминал и проверить работу командой composer

Пример использования composer php

Для примера предлагаю рассмотреть установку библиотеки mpdf (ссылка на библиотеку), которая позволят генерировать pdf файл используя php.

Для этого создадим папку myproject и перейдем в нее:

mkdir myproject
cd myproject

Следующим шагом скачаем библиотеку mpdf используя композер:

composer require mpdf/mpdf

После этого в myproject появятся папка vendor и два файла — composer.json и composer.lock.

Файл composer.json

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

//composer.json
{
    "require": {
        "mpdf/mpdf": "^7.1"
    }
}

Ключ require это первая и часто единственное, что находится в файле. Он указывает на скачанный пакет и его версию, где косой чертой разделено название поставщика и название самой библиотеки.

Файл composer.lock

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

Именно эти пакеты (помимо самой mpdf) указаны в файле composer.lock. Для каждого из них описывается версия, которая использовалась при разработке библиотеки. Версионность важно сохранять, т.к. от версии к версии та или иная зависимость может содержать разный набор методов.

//composer.json
{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
        "This file is @generated automatically"
    ],
    "content-hash": "2833371aed4743ebf60ecd860eace04c",
    "packages": [
        {
            "name": "mpdf/mpdf",
            "version": "v7.1.9",
            ....
        },
        {
            "name": "myclabs/deep-copy",
            "version": "1.8.1",
            ....
        },
        {
            "name": "paragonie/random_compat",
            "version": "v9.99.99",
            ....
        },
        {
            "name": "psr/log",
            "version": "1.1.0",
            ....
        },
        {
            "name": "setasign/fpdi",
            "version": "1.6.2",
            ....
        }
    ],
    "packages-dev": [],
    "aliases": [],
    "minimum-stability": "stable",
    "stability-flags": [],
    "prefer-stable": false,
    "prefer-lowest": false,
    "platform": [],
    "platform-dev": []
}

Тем самым, если мы скачаем проект, который разрабатывался с использованием композера и запустим composer install, то нам установятся ровно те зависимости с нужными версиями, которые изначально использовались при разработке.

Обязательно ли использовать composer.lock при первой установке проекта?

Допустим, мы разрабатывали проект пять лет назад и использовали библиотеку mpdf с самыми последними на тот момент версиями зависимостей, которые она использовала.

Так вот сейчас (спустя пять лет) при установке проекта с помощью команды composer install имея у себя только файл composer.json, мы получим версии зависимостей, которые актуальные на сегодняшний день, а не те которые использовались при изначальной разработке проекта. Это может вызвать конфликт методов, т.к. будет нарушена версионность.

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

Папка vendor и файл autoload.php

В папку vendor помещаются установленные библиотеки и зависимости к ним. Так же помимо всего этого есть autoload.php. Он подключается с помощью функции require() , как правило, в самое начало файла, где планируется использоваться библиотека.

Для примера, в ранее созданной папке myproject создадим файл index.php

Подключим autoload.php и вызовем метод библиотеки mgdf

//index.php
require 'vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('Hello world!');
$mpdf->Output();