複数のCakePHPに入れるライブラリを1つのComposerで管理
PluginとVendorの中を1つのComposerで管理したい
以下のツリーのように、ひとつのCakePHP本体と複数のCakePHPアプリケーションがあるときに
DebugKitやPHPUnitなどはそれぞれのアプリケーションごとにある必要は無く、共通で参照できる場所にあればオッケーです。
. ├── app1/(CakePHPアプリケーション) │ ├── Plugin/ │ └── Vendor/ ├── app2/(CakePHPアプリケーション) │ ├── Plugin/ │ └── Vendor/ ├── app3/(CakePHPアプリケーション) │ ├── Plugin/ │ └── Vendor/ ├── composer/ └── lib/(CakePHP本体) └── Cake/
- 各CakePHP アプリケーションディレクトリ内のPluginとVendorはComposerで入れたい
- Composerは共通の1つで管理したい
こんなことがしたかったので、次のようにやってみました。
Composerのインストール
mkdir -p composer/{bin,Vendor,Plugin} cd composer https://getcomposer.org/installer | php -- --install-dir=bin
composer.jsonを記述
vi bin/composer.json
{ "require": { "phpunit/phpunit": "3.7.*", "cakephp/debug_kit": "2.*" }, "config": { "vendor-dir":"../Vendor" }, "extra": { "installer-paths": { "../Plugin/{$name}/": [ "cakephp/debug_kit" ] } } }
cd composer/bin php composer.phar install
こうすると、installer-pathsで指定したライブラリはcomposer/Plugin/に、
それ以外はvendor-dirで指定したcomposer/Vendor/に分かれて入るので、
各アプリケーションからApp::build()でパスを追加指定してあげます。
vi app2/Config/bootstrap.php
<?php App::build(array( 'Vendor' => array( '/path/to/composer/Vendor/', ), 'Plugin' => array( '/path/to/composer/Plugin/', ), ) ); // アプリケーションで使いたいプラグインだけをロード CakePlugin::load('DebugKit')
これでオッケー。
Composerは便利だなー。