Composer – это менеджер зависимостей для PHP. Если вы вели какую-либо современную PHP-разработку в последние несколько лет, вы, скорее всего, использовали Composer. Packagist – репозиторий для Composer, то место, где Composer будет искать устанавливаемые пакеты (библиотеки).
В этой статье мы объясним, почему вы должны использовать менеджер зависимостей, а также покажем, как интегрировать Composer к своему WordPress-сайту.
Почему стоит использовать менеджер зависимостей в WordPress
Повторное использование кода – хорошая вещь. Ваши клиенты не будут платить вам за повторное изобретение колеса, они платят за то, чтобы вы создали для них сайт или приложение. Возможно, вы уже знаете это, и потому у вас имеется набор плагинов, которые вы используете на всех создаваемых вами сайтах WordPress. Вы уже используете код других людей, оформленный в виде плагинов, однако есть также огромный мир современных PHP библиотек, доступных вам через Composer.
Некоторые разработчики сделали плагины доступными в виде зависимостей для Composer.
Менеджер зависимостей может быть частью вашего рабочего процесса. Он позволяет вынести сторонний код за пределы вашего исходного репозитория. Также он позволяет воспользоваться многочисленными PHP-библиотеками, которые в других ситуациях были бы недоступны.
Если вы – один из тех, кому нравится взламывать плагины и переписывать их так, чтобы они делали необходимые вам вещи (после чего ваши изменения будут убиты очередным обновлением плагина), менеджер зависимостей позволит поменять ваш ход мыслей, заставит вас по-другому добиваться поставленных целей.
Начинаем работу с Composer
Если вы уже работали с Composer, вы знаете, что для начала вам нужно поместить WordPress в подпапку. Возможно, вы используете подмодуль, как предлагает Марк Джекит.
Отлично! В таком случае давайте превратим этот подмодуль WordPress в зависимость Composer.
Но для начала вам нужно будет удалить подмодуль. Мы не будем рассказывать про это в данной статье.
Краткое введение в инсталляторы Composer
Composer устанавливает библиотеки в каталог vendor в корне вашего проекта. Каждый пакет по умолчанию располагается в vendor/{vendorName}/{libraryName}. Инсталлятор позволяет вам менять это поведение на основе типа пакета. Поскольку WordPress не является библиотекой (это скорее приложение со статичными ресурсами), нам нужно установить его в отдельную папку в пределах директории корня документа.
К счастью, нам не надо создавать инсталлятор WordPress самостоятельно, поскольку он уже существует.
Установка WordPress
Определить зависимости Composer вы можете в файле composer.json, который находится в корне вашего проекта. Существует автоматически обновляемый форк WordPress, который включает в себя файл composer.json.
Чистый файл Composer включает в качестве зависимостей инсталлятор WordPress, а также саму систему WordPress. Также имеется раздел extra, в котором вы сообщаете инсталлятору WordPress, куда поместить WordPress.
{ "name": "pmg/composer-wp-example", "description": "Getting start with WordPress and Composer", "license": "MIT", "require": { "php": ">=5.5", "johnpbloch/wordpress-core-installer": "0.2.0", "johnpbloch/wordpress": "~4.2" }, "extra": { "wordpress-install-dir": "wp" } }
Приведенный выше код установит WordPress в каталог wp. Если у вас уже установлен Composer, вы можете ввести composer install в командную строку.
Если вывести список файлов из нашей новой директории, то мы увидим WordPress, новый каталог vendor, а также файл composer.lock:
wp-composer-example$ ls composer.json composer.lock vendor wp
Установка плагинов и произвольных репозиториев
Теперь, когда у нас установлена WordPress, давайте поставим некоторые плагины с помощью composer. Помните инсталлятор, приведенный выше? Так вот: существуют и другие, произвольные инсталляторы для плагинов и тем WordPress, которые являются частью библиотеки composer/installers. Давайте воспользуемся ими. Пути к файлам ниже предполагают, что вы задали для content папку wp-content.
Чтобы установить плагины в качестве зависимостей Composer с WP Packagist, нам нужно добавить их в виде репозиториев в наш файл composer.json. Наш новый файл будет иметь следующий вид:
{ "name": "pmg/composer-wp-example", "description": "Getting start with WordPress and Composer", "license": "MIT", "repositories": [ { "type":"composer", "url":"http://wpackagist.org" } ], "require": { "php": ">=5.5", "johnpbloch/wordpress-core-installer": "0.2.0", "johnpbloch/wordpress": "~4.2", "composer/installers": "~1.0" }, "extra": { "wordpress-install-dir": "wp", "installer-paths": { "content/plugins/{$name}": ["type:wordpress-plugin"], "content/themes/{$name}": ["type:wordpress-theme"], "content/mu-plugins/{$name}": ["type:wordpress-muplugin"] } } }
Давайте установим в качестве зависимости WordPress SEO:
{ "name": "pmg/composer-wp-example", "description": "Getting start with WordPress and Composer", "license": "MIT", "repositories": [ { "type":"composer", "url":"http://wpackagist.org" } ], "require": { "php": ">=5.5", "johnpbloch/wordpress-core-installer": "0.2.0", "johnpbloch/wordpress": "~4.2", "composer/installers": "~1.0", "wpackagist-plugin/wordpress-seo": "~2.1" }, "extra": { "wordpress-install-dir": "wp", "installer-paths": { "content/plugins/{$name}": ["type:wordpress-plugin"], "content/themes/{$name}": ["type:wordpress-theme"], "content/mu-plugins/{$name}": ["type:wordpress-muplugin"] } } }
После запуска composer update из командной строки у нас будет директория content, которая будет содержать наш недавно установленный плагин!
wp-composer-example$ ls composer.json composer.lock content vendor wp wp-composer-example$ ls content/plugins/ wordpress-seo
Другие советы
В идеале вам нужно развернуть свой WordPress-сайт таким образом, чтобы папка vendor и ваши файлы composer.{lock,json} не были в корне документа и не были публично доступными. Блокировать эти файлы можно с помощью конфигурации сервера:
RewriteEngine on RewriteRule ^composer\.(lock|json)$ - [F,L] RewriteRule ^vendor/.*$ - [F,L]
server { host yoursite.com # ... location ~ ^/composer\.(json|lock) { return 401; } location /vendor { return 401; } }
Я написал небольшой WordPress Skeleton, чтобы вы могли начать работу с Composer.
Делаем первый шаг
Как только вы начнетесь пользоваться Composer, вам будет сложно отказаться от него. Дайте ему шанс – по крайней мере, вы можете попробовать поставить WordPress через Composer.
Источник: https://www.pmg.com
Отличный пост! Не знал что у WP есть свой Packagist сайт. Надеюсь там есть самые популярные модули.
да, там очень много плагинов и тем WordPress.
Добрый день!
А с помощью какого инструмента потом собирать папки «wp» и «content» в единый каталог для отправки на удаленный сервер? Или это не требуется?
Если знать точную структуру каталогов сервера, это можно сделать с помощью Ant
Вместо номеров версий лучше оставить «*»
{
«name»: «pmg/composer-wp-example»,
«description»: «Getting start with WordPress and Composer»,
«license»: «MIT»,
«require»: {
«php»: «>=5.5»,
«johnpbloch/wordpress-core-installer»: «*»,
«johnpbloch/wordpress»: «*»
},
«extra»: {
«wordpress-install-dir»: «wp»
}
}