Composer Kullanım İpuçları
Composer PHP'de bağımlılık yönetimi için bir araçtır. Projenizin bağlı olduğu kütüphaneleri bildirmenize olanak tanır ve bunları sizin için yükler ve günceller. Öğreneceğiz:
- Composer nasıl kurulur
- yeni veya mevcut projede kullanın
Kurulum
Composer, aşağıdaki şekilde indirip kurduğunuz çalıştırılabilir bir .phar
dosyasıdır.
Pencereler
Composer-Setup.exe resmi yükleyicisini kullanın.
Linux, macOS
İhtiyacınız olan tek şey bu sayfadan kopyalayabileceğiniz 4 komuttur.
Dahası, sistemin PATH
adresindeki klasöre kopyalandığında Composer global olarak erişilebilir
hale gelir:
$ mv ./composer.phar ~/bin/composer # or /usr/local/bin/composer
Projede Kullanım
Projenizde Composer'ı kullanmaya başlamak için tek ihtiyacınız olan bir composer.json
dosyasıdır. Bu dosya
projenizin bağımlılıklarını tanımlar ve başka meta veriler de içerebilir. En basit composer.json
şu
şekilde görünebilir:
{
"require": {
"nette/database": "^3.0"
}
}
Burada, uygulamamızın (veya kütüphanemizin) nette/database
paketine bağlı olduğunu (paket adı bir satıcı
adı ve proje adından oluşur) ve ^3.0
sürüm kısıtlamasına uyan sürümü istediğini söylüyoruz.
Yani, proje kökünde composer.json
dosyası olduğunda ve çalıştırdığımızda:
composer update
Composer Nette Veritabanını vendor
dizinine indirecektir. Ayrıca, tam olarak hangi kütüphane sürümlerini
yüklediği hakkında bilgi içeren bir composer.lock
dosyası oluşturur.
Composer bir vendor/autoload.php
dosyası oluşturur. Bu dosyayı kolayca dahil edebilir ve bu kütüphanelerin
sağladığı sınıfları herhangi bir ekstra çalışma yapmadan kullanmaya başlayabilirsiniz:
require __DIR__ . '/vendor/autoload.php';
$db = new Nette\Database\Connection('sqlite::memory:');
Paketleri En Son Sürümlere Güncelleyin
Kullanılan tüm paketleri composer.json
adresinde tanımlanan sürüm kısıtlamalarına göre en son sürüme
güncellemek için composer update
komutunu kullanın. Örneğin "nette/database": "^3.0"
bağımlılığı için en son 3.x.x sürümünü yükleyecek, ancak sürüm 4'ü yüklemeyecektir.
composer.json
dosyasındaki sürüm kısıtlamalarını örneğin "nette/database": "^4.1"
olarak
güncellemek ve en son sürümü yüklemeyi etkinleştirmek için composer require nette/database
komutunu
kullanın.
Kullanılan tüm Nette paketlerini güncellemek için, hepsini komut satırında listelemek gerekir, örn:
composer require nette/application nette/forms latte/latte tracy/tracy ...
Bu da pratik değildir. Bu nedenle, bunu sizin için yapacak basit bir komut dosyası Composer Frontline kullanın:
php composer-frontline.php
Yeni Proje Oluşturma
Yeni Nette projesi basit bir komut çalıştırılarak oluşturulabilir:
composer create-project nette/web-project name-of-the-project
Bunun yerine name-of-the-project
adresine projenizin dizininin adını girmeli ve komutu çalıştırmalısınız.
Composer, composer.json
dosyasını zaten içeren GitHub'dan nette/web-project
deposunu getirecek ve
hemen ardından Nette Framework'ün kendisini yükleyecektir. Geriye kalan tek şey temp/
ve log/
dizinleri üzerindeki yazma izinlerini
kontrol etmektir ve artık hazırsınız.
Projenin hangi PHP sürümünde barındırılacağını biliyorsanız, bunu ayarladığınızdan emin olun.
PHP Sürümü
Composer her zaman kullanmakta olduğunuz PHP sürümüyle (ya da Composer'ı çalıştırdığınızda komut satırında
kullanılan PHP sürümüyle) uyumlu olan paket sürümlerini yükler. Bu sürüm muhtemelen web barındırıcınızın
kullandığı sürümle aynı değildir. Bu nedenle composer.json
dosyanıza barındırıcınızdaki PHP sürümü
hakkında bilgi eklemeniz çok önemlidir. Bundan sonra, yalnızca ana bilgisayarla uyumlu paket sürümleri yüklenecektir.
Örneğin, projeyi PHP 8.2.3 üzerinde çalışacak şekilde ayarlamak için şu komutu kullanın:
composer config platform.php 8.2.3
Sürüm composer.json
dosyasına bu şekilde yazılır:
{
"config": {
"platform": {
"php": "8.2.3"
}
}
}
Bununla birlikte, PHP sürüm numarası dosyanın başka bir yerinde, require
bölümünde de listelenir. İlk
numara paketlerin hangi sürüm için yükleneceğini belirtirken, ikinci numara uygulamanın kendisinin hangi sürüm için
yazıldığını söyler. (Tabii ki, bu sürümlerin farklı olması mantıklı değildir, bu nedenle çift giriş bir
fazlalıktır). Bu sürümü şu komutla ayarlarsınız:
composer require php 8.2.3 --no-update
Veya doğrudan composer.json
dosyasında:
{
"require": {
"php": "8.2.3"
}
}
PHP Sürümünü Yoksayma
Paketler genellikle hem uyumlu oldukları en düşük PHP sürümünü hem de test edildikleri en yüksek sürümü
belirtirler. PHP'nin daha yeni bir sürümünü kullanmayı planlıyorsanız, belki de test amacıyla, Composer böyle bir paketi
yüklemeyi reddedecektir. Çözüm, Composer'ın gerekli PHP sürümünün üst sınırlarını göz ardı etmesine neden olan
--ignore-platform-req=php+
seçeneğini kullanmaktır.
Yanlış Raporlar
Paketleri yükseltirken veya sürüm numaralarını değiştirirken çakışmalar meydana gelir. Bir paketin gereksinimleri
diğeriyle çakışır ve bu böyle devam eder. Ancak, Composer bazen yanlış bir mesaj yazdırır. Gerçekte var olmayan bir
çakışma bildirir. Bu durumda, composer.lock
dosyasını silmek ve tekrar denemek yardımcı olur.
Hata mesajı devam ederse, ciddi bir mesajdır ve neyi nasıl değiştireceğinizi okumanız gerekir.
Packagist.org – Küresel Depo
Packagist, aksi söylenmediği takdirde Composer'ın paketleri aramaya çalıştığı ana paket deposudur. Kendi paketlerinizi de burada yayınlayabilirsiniz.
Ya Merkezi Depoyu İstemiyorsak
Şirketimizde Packagist'te herkese açık olarak barındırılamayan dahili uygulamalarımız veya kütüphanelerimiz varsa, bu projeler için kendi depolarımızı oluşturabiliriz.
Resmi belgelerde depolar hakkında daha fazla bilgi bulabilirsiniz.
Otomatik Yükleme
Composer'ın önemli bir özelliği, yüklediği tüm sınıflar için otomatik yükleme sağlamasıdır; bunu
vendor/autoload.php
dosyasını ekleyerek başlatırsınız.
Ancak, Composer'ı vendor
klasörü dışındaki diğer sınıfları yüklemek için kullanmak da mümkündür.
İlk seçenek, Composer'ın tanımlı klasörleri ve alt klasörleri taramasına, tüm sınıfları bulmasına ve bunları
otomatik yükleyiciye dahil etmesine izin vermektir. Bunu yapmak için autoload > classmap
adresini
composer.json
olarak ayarlayın:
{
"autoload": {
"classmap": [
"src/", # includes the src/ folder and its subfolders
]
}
}
Daha sonra, her değişiklikte composer dumpautoload
komutunu çalıştırmak ve otomatik yükleme tablolarının
yeniden oluşturulmasına izin vermek gerekir. Bu son derece zahmetlidir ve bu görevi, aynı etkinliği arka planda otomatik
olarak ve çok daha hızlı gerçekleştiren RobotLoader'a emanet etmek çok
daha iyidir.
İkinci seçenek PSR-4'ü takip etmektir. Basitçe söylemek gerekirse, ad
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, yani
App\Core\RouterFactory
, /path/to/App/Core/RouterFactory.php
dosyasında bulunur. Yapılandırma
örneği:
{
"autoload": {
"psr-4": {
"App\\": "app/" # the App\ namespace is in the app/ directory
}
}
}
Bu davranışın tam olarak nasıl yapılandırılacağını öğrenmek için Composer Belgelerine bakın.
Yeni Sürümlerin Test Edilmesi
Bir paketin yeni bir geliştirme sürümünü test etmek istiyorsunuz. Bunu nasıl yapabilirsiniz? Öncelikle,
composer.json
dosyasına paketlerin geliştirme sürümlerini yüklemenize izin verecek, ancak bunu yalnızca
gereksinimleri karşılayan kararlı sürüm kombinasyonu yoksa yapacak olan bu seçenek çiftini ekleyin:
{
"minimum-stability": "dev",
"prefer-stable": true,
}
Ayrıca composer.lock
dosyasını silmenizi öneririz, çünkü bazen Composer anlaşılmaz bir şekilde
yüklemeyi reddeder ve bu sorunu çözecektir.
Paketin nette/utils
olduğunu ve yeni sürümün 4.0 olduğunu varsayalım. Şu komut ile yüklüyorsunuz:
composer require nette/utils:4.0.x-dev
Ya da 4.0.0-RC2 gibi belirli bir sürümü yükleyebilirsiniz:
composer require nette/utils:4.0.0-RC2
Başka bir paket kütüphaneye bağlıysa ve eski bir sürüme kilitliyse (örn. ^3.1
), paketi yeni sürümle
çalışacak şekilde güncellemek idealdir. Ancak, sınırlamayı aşmak ve Composer'ı geliştirme sürümünü yüklemeye ve
eski bir sürümmüş gibi davranmaya zorlamak istiyorsanız (örneğin, 3.1.6), as
anahtar sözcüğünü
kullanabilirsiniz:
composer require nette/utils "4.0.x-dev as 3.1.6"
Çağrı Komutları
Kendi özel komutlarınızı ve komut dosyalarınızı Composer aracılığıyla yerel Composer komutlarıymış gibi
çağırabilirsiniz. vendor/bin
klasöründe bulunan komut dosyalarının bu klasörü belirtmesine gerek yoktur.
Örnek olarak, composer.json
dosyasında testleri çalıştırmak için Nette Tester 'ı kullanan bir komut dosyası tanımlıyoruz:
{
"scripts": {
"tester": "tester tests -s"
}
}
Daha sonra testleri composer tester
ile çalıştırıyoruz. Projenin kök klasöründe değil, bir alt dizinde
olsak bile komutu çağırabiliriz.
Teşekkür Gönder
Size açık kaynak yazarlarını mutlu edecek bir numara göstereceğiz. Projenizin kullandığı kütüphanelere GitHub'da
kolayca bir yıldız verebilirsiniz. Sadece symfony/thanks
kütüphanesini yükleyin:
composer global require symfony/thanks
Ve sonra koş:
composer thanks
Dene bakalım!
Konfigürasyon
Composer, sürüm kontrol aracı Git ile yakından entegre edilmiştir. Eğer Git kullanmıyorsanız bunu Composer'a söylemeniz gerekmektedir:
composer -g config preferred-install dist