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\Router\RouterFactory, /path/to/App/Router/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