Kısaca Composer

Hatice Ergün
Kodcular
Published in
3 min readMay 12, 2018

Composer bir paket yöneticisidir. Composer kullanımı için PHP 5.3.2 ve üstüne ihtiyaç vardır. Composer; paketleri, packagist.org sitesinden yükler. Biz de bu adresten gidip ihtiyacımız olan peketlerin ismine bakacağız ve istediğimiz paketi yükleyebileceğiz.

Projemize composer ile paket yüklediğimiz zaman ana dizinimizde; composer.json dosyası, composer.lock dosyası ve vendor klasörü oluşur. Yüklenen kütüphanenin dosyaları vendor klasöründe tutulur. Composer.json dosyamıza da bu paketin ismi ve versiyonu eklenir.
Biz her paket yüklediğimizde; dosyalar vendor klasörüne, paket bilgisi de composer.json dosyasına eklenir. Composer.lock dosyası da, kütüphanelerin ve onların kullandığı kütüphanelerin verisyonlarını tutar. Bu dosya sürekli güncel tutulur.

Başlayalım

Projenin ana dizininde terminali açalım,
composer init komutu ile gelen ekranda, proje hakkında istenen bilgileri giriyoruz. Bu işlemden sonra projenin ana dizininde composer.json dosyası oluşur.
Şimdi bir kütüphane ekleyelim.
composer require monolog/monolog komutu ile monolog kütüphanesini yüklüyorum.

Composer.json dosyamızın son hali;

{
"name": "proje/projeismi",
"description": "Proje açıklaması",
"authors": [
{
"name": "Hatice Ergün",
"email": "hadeyici@gmail.com"
}
],
"require": {
"monolog/monolog": "^1.14"
}
}

Komutlar

composer require braham/twitteroauth komutu ile paketi yükledik.
composer update komutu ile kullanılan paketlerin yeni versiyonları için güncelleme yaptık.
composer show komutu ile yüklenen paketler listelenir.
composer remove monolog/monolog komutu ile, yüklediğimiz paketi kaldırdık.

Şimdi birkaç paket yükleyelim. Terminalde,

composer require firebase/php-jwt komutu ile paketi yükledik. Diğeri için,
composer require --dev phpunit/phpunit bu paketi de yükledikten sonra,
composer require --dev symfony/browser-kit bunu da yükledik.

Require ve Require-dev Farkı

Paket yüklerken ‘-–dev’ parametresi kullanıldığında composer.json dosyasında require-dev alanı oluşur. Yüklenecek paket sadece geliştirici için gerekliyse, kütüphane yüklenirken bu parametre kullanılır.

Composer.json dosyamızın son hali;

{
"name": "proje/projeismi",
"description": "Proje açıklaması",
"authors": [
{
"name": "Hatice Ergün",
"email": "hadeyici@gmail.com"
}
],
"require": {
"abraham/twitteroauth": "^0.7.4",
"firebase/php-jwt" : "^5.0.0"
},
"require-dev": {
"phpunit/phpunit": "^6.2",
"symfony/browser-kit": "^3.3"
}
}

Autoloading

İhtiyacımız olan paketleri kurduk. Şimdi bu paketleri projemizde nasıl kullanacağız?
Vendor klasörünün içinde bir de autoload.php dosyası oluşmuş durumdadır. Projemizde, örneğin index.php dosyamızda;
require_once ‘vendor/autoload.php’; kodunu eklersek tüm yüklediğimiz paketleri projemizde kullanabiliyor oluruz.

GitHub

Projemizi Github hesabımıza göndereceğiz (Projemizde gerekli kodları yazdığımızı varsayalım). Peki Git kullanırken hangi dosyalar gönderilecek, hangileri gönderilmeyecek?
Ana dizindeki composer.lock dosyası ve composer.json dosyası gönderilecek.
Vendor klasörü ve klasör içindeki dosyalar gönderilmeyecek. Çünkü Git’ten projeyi aldığımızda composer install komutu ile composer.json içindeki paket bilgileri sayesinde bağımlılıkları kurabileceğiz. Bu yüzden, kütüphane dosyalarını Githuba atmaya gerek yok.

Diğer Yöntem

Composer.json dosyası elle de oluşturulup kullanılabilir. Ana dizinde composer.json dosyası oluşturuyoruz. Yüklemek istediğimiz paketi bu dosyaya yazıyoruz. Örneğin monolog paketini ekleyelim.

{
"require": {
"monolog/monolog": "1.6"
}
}

Daha sonra dosyayı kaydedip terminalde,
composer install yazıyoruz. Bu işlemden sonra projemizin ana dizininde vendor klasörü oluşur ve paketlerin dosyaları bu klasöre yüklenir.

Sıklıkla Kullanılan Composer Bileşenleri

composer.json dosyamızda name , authors , require gibi bileşenlerin yanı sıra aşağıdakiler de sıklıkla kullanılmaktadır.

  • Autoload : Örneğin projemizin esas dosyaları src dizinimizde ve biz psr-4 standartlarına göre kod yazdık diyelim. Yani dosyalarımızı yönlendirmeye ihtiyacımız var demektir. Bu ihtiyacı composer.json dosyamızda aşağıdaki komutla gidermiş oluyoruz.
"autoload": {
"psr-4": {
"PROJE_NAMESPACE_ADI\": "src/"
}
},
  • minimum-stability : Bu komut sayesinde projemize dahil ettiğimiz 3. parti paketlerin en az hangi seviyede olması gerektiğini belirtiyoruz. Varsayılan değeri stable olan bu komutla yani ‘eklediğim paketlerin en az stabil sürümü olan halini yükle’ demiş oluyoruz.
"minimum-stability": "stable"
  • repositories : Projemize farklı adreslerdeki projeleri, dosyaları veya repoları dahil etmemizi sağlayan komuttur. Sıklıkla repoları dahil etmek için kullanılır.
"repositories": [
{ "type": "vcs", "url": git@gitlab.adres.com:proje/proje.git"},
{ "type": "vcs", "url": "git@gitlab.adres.com:proje/proje.git" }, { "type": "vcs", "url": "git@gitlab.adres.com:proje/proje.git" }
],
  • scripts : Terminalde uzun uzun komut yazmak yerine composer.json dosyamızda script yazarız. İhtiyaç duyduğumuzda bunları tanımladığımız kısa komutları kullanırız.
"scripts": {
"post-update-cmd": "MyVendor\\MyClass::postUpdate",
"post-package-install": [
"MyVendor\\MyClass::postPackageInstall"
],
"post-install-cmd": [
"MyVendor\\MyClass::warmCache",
"phpunit -c app/"
],
"post-autoload-dump": [
"MyVendor\\MyClass::postAutoloadDump"
],
"post-create-project-cmd": [
"php -r \"copy('config/local-example.php', 'config/local.php');\""
]
}
  • type : Projenin tipini belirtmek için verilen komuttur.
"type": "library"
  • license : Projenin lisansını beliertmek için verilen komuttur.
"license": "Apache-2.0"

Bunun gibi daha birçok composer.json dosya komutlarına dökümandan ulaşabilirsiniz.

composer.json Örnekleri

  1. elasticsearch-php
  2. sebastianbergmann/object-reflector
  3. KnpLabs/php-github-api
  4. Symfony

İyi çalışmalar.

Kaynakça:

https://getcomposer.org/doc/
http://composer.json.jolicode.com/
https://erenhatirnaz.wordpress.com/2015/08/14/phpde-composer-ile-bagimlilik-yonetimi-1/
http://www.teknomavi.com/yazilim/php/composer-paket-yoneticisi-nedir-nasil-kurulur-nasil-kullanilir/
http://www.yusufsezer.com.tr/composer-kullanimi/

--

--