Composer Kullanım İpuçları
Composer, PHP'de bağımlılık yönetimi için bir araçtır. Projenizin bağımlı olduğu kütüphaneleri bildirmenizi sağlar, onları sizin için kurar ve günceller. Şunları öğreneceğiz:
- Composer nasıl kurulur
- yeni ya da var olan bir projede nasıl kullanılır
Kurulum
Composer, indirip aşağıdaki gibi kuracağınız çalıştırılabilir bir .phar dosyasıdır.
Windows
Resmi kurulum programını kullanın: Composer-Setup.exe.
Linux, macOS
Tek gereken, bu sayfadan kopyalayabileceğiniz 4 komut.
Ayrıca, sistemin PATH değişkeninde bulunan bir klasöre kopyalayarak Composer'ı her yerden erişilebilir
kılabilirsiniz:
$ mv ./composer.phar ~/bin/composer # ya da /usr/local/bin/composer
Projede Kullanım
Projenizde Composer kullanmaya başlamak için tek gereken bir composer.json dosyasıdır. Bu dosya projenizin
bağımlılıklarını anlatır ve başka meta veriler de içerebilir. En basit composer.json şöyle
görünebilir:
{
"require": {
"nette/database": "^3.0"
}
}
Burada, uygulamamızın (ya da kütüphanemizin) nette/database paketini gerektirdiğini (paket adı bir üretici
adı ile projenin adından oluşur) ve ^3.0 sürüm kısıtına uyan bir sürüm istediğini (yani en son
3 sürümünü) söylüyoruz.
composer.json dosyası proje kökündeyken şunu çalıştırın:
composer update
Composer, Nette Database paketini vendor/ dizinine indirir. Ayrıca, tam olarak hangi kütüphane sürümlerini
kurduğuna dair bilgi içeren bir composer.lock dosyası oluşturur.
Composer bir vendor/autoload.php dosyası üretir. Bu dosyayı basitçe dahil edip kütüphanelerin
sınıflarını fazladan hiçbir iş yapmadan kullanmaya başlayabilirsiniz:
require __DIR__ . '/vendor/autoload.php';
$db = new Nette\Database\Connection('sqlite::memory:');
Paketleri En Son Sürümlere Güncelleme
Kullanılan kütüphaneleri, composer.json içinde tanımlı kısıtlara göre en son sürümlere güncellemek
için composer update komutunu kullanın. Örneğin "nette/database": "^3.0" bağımlılığıyla en son
3.x.x sürümünü kurar, ama 4 sürümünü kurmaz.
composer.json dosyasındaki kısıtları, en son sürümün kurulmasına izin verecek şekilde örneğin
"nette/database": "^4.1" olarak güncellemek için composer require nette/database komutunu
kullanın.
Kullanılan tüm Nette paketlerini güncellemek için hepsini komut satırında saymanız gerekirdi, örneğin:
composer require nette/application nette/forms latte/latte tracy/tracy ...
Bu pratik değil. Bu yüzden bunu sizin için yapan basit Composer Frontline betiğini kullanın:
php composer-frontline.php
Yeni Proje Oluşturma
Tek bir komutla yeni bir Nette projesi oluşturabilirsiniz:
composer create-project nette/web-project projenin-adi
projenin-adi yerine projeniz için kullanacağınız dizin adını yazın ve komutu çalıştırın. Composer,
GitHub'dan nette/web-project deposunu indirir; bu depo zaten bir composer.json dosyası içerir.
Ardından Nette Framework'ün kendisini kurar. Geriye yalnızca temp/ ve log/ dizinleri için dizin izinlerini ayarlamak kalır ve proje
çalışır durumda olur.
Projenizin hangi PHP sürümünde barındırılacağını biliyorsanız, bunu mutlaka ayarlayın.
PHP Sürümü
Composer her zaman, o an kullandığınız PHP sürümüyle (daha kesin olarak, Composer çalıştırılırken komut
satırında kullanılan PHP sürümüyle) uyumlu paket sürümlerini kurar. Bu, web barındırıcınızın kullandığı sürümle
aynı olmayabilir. Bu yüzden barındırmanızdaki PHP sürümü bilgisini composer.json dosyasına eklemek çok
önemlidir. Böylece yalnızca barındırmayla uyumlu paket sürümleri kurulur.
Örneğin projenin PHP 8.2.3 üzerinde çalışacağını belirtmek için şu komutu kullanın:
composer config platform.php 8.2.3
Sürüm composer.json dosyasına şöyle yazılır:
{
"config": {
"platform": {
"php": "8.2.3"
}
}
}
Ancak PHP sürüm numarası dosyanın başka bir yerinde, require bölümünde de belirtilir. İlk numara
paketlerin hangi sürüme göre kurulacağını belirlerken, ikinci numara uygulamanın kendisinin hangi sürüm için
yazıldığını gösterir. Örneğin PhpStorm bunu PHP language level ayarını belirlemek için kullanır. (Elbette bu
sürümlerin farklı olması anlamlı değildir, dolayısıyla çift kayıt bir gözden kaçmadır.) Bu sürümü şu komutla
ayarlayın:
composer require php 8.2.3 --no-update
Ya da doğrudan composer.json dosyasında:
{
"require": {
"php": "8.2.3"
}
}
PHP Sürümünü Yok Sayma
Paketler genellikle hem uyumlu oldukları en düşük PHP sürümünü hem de karşı test edildikleri en yüksek sürümü
belirtir. Belki test amacıyla daha da yeni bir PHP sürümü kullanmak isterseniz, Composer böyle bir paketi kurmayı reddeder.
Çözüm, Composer'ın gereken PHP sürümünün üst sınırlarını yok saymasını sağlayan
--ignore-platform-req=php+ seçeneğidir.
Yanlış Bildirimler
Paketleri yükseltirken ya da sürüm numaralarını değiştirirken bazen çakışmalar olur. Bir paketin gereksinimleri bir
başkasıyla çakışır vb. Ancak Composer bazen yanlış bildirimler verir. Aslında var olmayan bir çakışmayı bildirir.
Böyle durumlarda composer.lock dosyasını silip yeniden denemek işe yarayabilir.
Hata mesajı yine de sürerse, gerçektir; ne değiştirmeniz gerektiğini ve nasıl yapacağınızı anlamak için okumalısınız.
Packagist.org – Genel Depo
Packagist, Composer'ın paketleri varsayılan olarak aradığı ana depodur. Kendi paketlerinizi de burada yayımlayabilirsiniz.
Ya Merkezi Depoyu İstemiyorsak
Şirketimiz içinde herkese açık barındırılamayacak iç uygulamalarımız ya da kütüphanelerimiz varsa, onlar için kendi depolarımızı oluşturabiliriz.
Depolar hakkında daha fazlasını resmi belgelerde okuyun.
Autoloading
Composer'ın temel özelliklerinden biri, kurduğu tüm sınıflar için autoloading sağlamasıdır. Bunu
vendor/autoload.php dosyasını dahil ederek etkinleştirirsiniz.
Ancak Composer'ı, vendor/ dizininin dışındaki başka sınıfları yüklemek için de kullanabilirsiniz. İlk
seçenek, Composer'ın tanımlanan dizinleri ve alt dizinlerini taramasını, tüm sınıfları bulup autoloader'a katmasını
sağlamaktır. Bunun için composer.json içinde autoload > classmap ayarını yapın:
{
"autoload": {
"classmap": [
"src/", # src/ dizinini ve alt dizinlerini kapsar
]
}
}
Sonrasında, autoloading tablolarını yeniden üretmek için her değişiklikten sonra composer dumpautoload
komutunu çalıştırmanız gerekir. Bu son derece elverişsizdir. Bu işi, aynı işi arka planda otomatik olarak ve çok daha
hızlı yapan RobotLoader aracına bırakmak çok daha iyidir.
İkinci seçenek, PSR-4 standardına uymaktır. Basitçe söylemek gerekirse,
isim alanlarının ve sınıf adlarının dizin yapısına ve dosya adlarına karşılık geldiği bir sistemdir; örneğin
App\Core\RouterFactory sınıfı /path/to/App/Core/RouterFactory.php dosyasında bulunur. Yapılandırma
örneği:
{
"autoload": {
"psr-4": {
"App\\": "app/" # App\ isim alanı app/ dizinindedir
}
}
}
Bu davranışı nasıl yapılandıracağınızın ayrıntıları için Composer belgelerine bakın.
Yeni Sürümleri Deneme
Bir paketin yeni geliştirme sürümünü denemek mi istiyorsunuz? İşte nasıl yapılacağı. Önce
composer.json dosyanıza şu iki seçeneği ekleyin. Bu, geliştirme sürümlerinin kurulmasına izin verir; ancak
Composer bunlara yalnızca kararlı sürümlerden hiçbir bileşim gereksinimleri karşılamıyorsa başvurur:
{
"minimum-stability": "dev",
"prefer-stable": true,
}
Ayrıca composer.lock dosyasını silmenizi öneririz; çünkü Composer bazen anlaşılmaz biçimde kurulumu
reddeder ve bu, sorunu çözebilir.
Diyelim ki paket nette/utils ve yeni sürüm 4.0. Şu komutla kurun:
composer require nette/utils:4.0.x-dev
Ya da belirli bir sürümü, örneğin 4.0.0-RC2 sürümünü kurabilirsiniz:
composer require nette/utils:4.0.0-RC2
Ancak başka bir paket bu kütüphaneye bağımlıysa ve daha eski bir sürüme kilitliyse (örneğin ^3.1), ideal
çözüm o bağımlı paketi yeni sürümle çalışacak şekilde güncellemektir. Yalnızca kısıtı aşmak ve Composer'ı,
geliştirme sürümünü daha eski bir sürümmüş gibi (örneğin 3.1.6) göstererek kurmaya zorlamak istiyorsanız
as anahtar sözcüğünü kullanabilirsiniz:
composer require nette/utils "4.0.x-dev as 3.1.6"
Komut Çağırma
Kendi önceden tanımlanmış komutlarınızı ve betiklerinizi, Composer'ın yerleşik komutlarıymış gibi Composer
üzerinden çağırabilirsiniz. vendor/bin dizinindeki betikler için bu yolu belirtmeniz gerekmez.
Örnek olarak, composer.json içinde testleri çalıştırmak üzere Nette
Tester kullanan bir betik tanımlayalım:
{
"scripts": {
"tester": "tester tests -s"
}
}
Testleri sonra composer tester ile çalıştırırız. Komutu, projenin kök dizininde değil de alt dizinlerinden
birindeyken bile çağırabilirsiniz.
Teşekkür Gönderin
Açık kaynak yazarlarını sevindirecek bir numara gösterelim. Projenizin kullandığı kütüphanelere GitHub'da kolayca
yıldız verebilirsiniz. Yalnızca symfony/thanks kütüphanesini kurun:
composer global require symfony/thanks
Ve sonra çalıştırın:
composer thanks
Deneyin!
Yapılandırma
Composer, sürüm denetimi aracı Git ile sıkı sıkıya bütünleşiktir. Git kurulu değilse, Composer'a onu kullanmamasını söylemeniz gerekir:
composer -g config preferred-install dist