Skip to content

Latest commit

 

History

History
123 lines (79 loc) · 6.78 KB

20130710_composer.md

File metadata and controls

123 lines (79 loc) · 6.78 KB

PHP Dünyasının Bağımlılık Yöneticisi : Composer

Bir süredir, PHP kütüphane ya da framework'lerinin kurulum belgelerine PEAR'a ek olarak yeni bir yöntem eklendi ve bu yöntem geliştiriciler tarafından önerilen yol olarak gösteriliyor. Bu yazı bu yöntem olan Composer hakkında bir yazı.

Nedir bu Composer ve neden lazım?

Composer, PHP için bir bağımlılık yöneticisi. Ana yazarları, Nils Adermann ve Jordi Boggiano. Boggiano, aynı zamanda Monolog projesinin de yazarlarından.

Composer'dan önce proje bağımlılıklarını, kullandığımız bir framework varsa onun sunduğu yöntemleri kullanarak, ya da kendi çözümlerimizle yönetiyorduk, ya da bu bağımlılık yönetme işi bir işkenceye de dönüşebiliyordu.

Composer yayınladığından beri bir de facto standart haline geldi. Bağımlılık yöneticisinin ana paket kaynağı packagist.org'da şu an 13000'e yakın kayıtlı paket bulunuyor. Daha da önemlisi, birçok geliştiricinin kullandığı önemli framework'ler (Zend, Symfony, Laravel, vb.) kurulum için bir süredir Composer'ı öneriyor.

Kurulum

Öncelikle Composer'ı kurabilmek için PHP 5.3.2 veya daha yüksek bir sürümünü kullanıyor olmalısınız. Bazı PHP yapılandırmalarına da ihtiyaç duyuyor, fakat buralarda bir sorun varsa kurulum scripti zaten sizi uyarıyor.

Sitelerinde hem *nix hem de windows sistemler için kurulumu anlatıyorlar. Ben burada *nix temelli sistemler için olan komutlara yer vereceğim.

Yapmanız gereken tek şey proje dizininizde şu komutu çalıştırmak (tabii curl komutu kurulu değilse ona da ihtiyacınız var, ya da wget'i de tercih edebilirsiniz):

curl -sS https://getcomposer.org/installer | php

Kurulum scripti bazı PHP yapılandırmalarını kontrol ediyor ve bir sorun yoksa composer.phar PHP arsiv dosyasını proje dizininize indiriyor.

PHAR, PHP'ye 5.2 sürümüyle birlikte gelen bir eklenti. PHAR ile birlikte kütüphaneler tek bir pakette arşivlenip kolayca dağıtılabiliyor, yaratılan projelerden kolayca koda dahil edilebiliyor, hatta Composer örneğinde olduğu gibi çalıştırılabilir dosya olarak da kullanılabiliyor.

Bu şekilde composer'ı proje bazlı yüklemiş ve kullanmış oluyoruz, fakat sistem genelinde tek bir composer kullanmamız da mümkün, ki ben bunu tercih ediyorum. Bunun için composer.phar'ı PATH değişkenine dahil bir dizine taşımak yeterli.

mv composer.phar /usr/local/bin/composer

Composer'ı parametresiz çalıştırdığımızda şöyle bir yardım menüsünü görüyoruz (çıktı uzun olduğu için hepsini koymadım).

$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                /_/
Composer version ab731b1197d76ce1e13fbf67a7e8f17a2be8b3e9

Usage:
  [options] command [arguments]

Options:
  --help           -h Display this help message.
  --quiet          -q Do not output any message.
  --verbose        -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
  --version        -V Display this application version.
  --ansi              Force ANSI output.

composer.json içeriği

Composer, bağımlılıkları projeniz içinde yer alacak olan composer.json adlı dosyayla yönetiyor. Aşağıda bir composer.json örneği görebilirsiniz:

{
    "require": {
        "laravel/framework": "4.0.*"
    },
    "require-dev": {
        "phpunit/phpunit": "3.7.*"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models"
        ],
        "psr-0": { "Example": "src/" }
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan optimize"
        ]
    }
}

Dosyadaki çeşitli bloklar şöyle:

  • require: Bu blok, her ortamda yüklenecek kütüphanelere dair tanımları içeriyor. Önce kütüphanenin packagist.org'daki karşılığı, sonra da versiyon bilgisi yer alıyor.

Packagist.org, Composer'ın kullandığı ana paket kaynağı.

  • require-dev: Burada ise, sadece dev ortamı için yüklenecek olan kütüphaneler belirtiliyor. Test odaklı geliştirme, debugging ya da performans ölçümüne dair kütüphaneler bu blokta yer almalı.

  • autoload: Composer kütüphanelerin otomatik olarak yüklenebilmesi için vendor/composer dizininde çeşitli mapping dosyaları ve vendor dizininin altında bir autoload.php dosyası oluşturuyor. Aynı zamanda projenizdeki namespace'iniz için psr-0'ı ya da belli dizinlerinn altındaki sınıflarınız için classmap'i kullanarak autoload işlemini composer'dan yönetebiliyorsunuz.

Eğer bir framework kullanmıyorsanız, autoload dosyasını yüklemeniz gerekli.

require_once './vendor/autoload.php';
  • scripts: Composer komutlarından (install, update) önce ya da sonra istediğiniz komutları çalıştırabiliyorsunuz. Yukarıdaki örnekte, Laravel framework'ünün komut satırı aracı Artisan'ın optimize komutu çalıştırılmış.

Önemli Composer komutları

Son olarak, Composer'da önemli bazı komutlardan bahsetmek istiyorum.

  • init: Komutun çalıştırıldığı dosyada bir composer.json dosyası yaratır.

  • install: composer.json dosyasında belirtilen bağımlılıkları yükler, varsa script'leri çalıştırır.

  • update: composer.json dosyasında belirtilen bağımlılıkları günceller.

  • dump-autoload: Composer'ın PHP sınıflarının autoload edilmesini sağlayan dosyalarını yenilemeyi sağlar.

  • create-project: Parametre olarak verilen paketi kullanarak yeni bir proje yaratır ve içindeki composer.json bağımlılıklarını hemen yükler. Özellikle framework'ler, Composer'ın bu komutuyla kullanıma hazır hale gelebiliyor.

Bir Laravel 4 projesi aşağıdaki komutla oluşturulabiliyor:

composer create-project laravel/laravel l4project

Symfony için ise şöyle yapmak gerekiyor:

composer create-project symfony/framework-standard-edition s23project

Sonuç

Composer yeni bir araç ama PHP dünyasında hızla yaygınlaştı. Bağımlılıkları doğru şekilde yöneten, autoloading desteği sunan, sıfırdan proje yaratmaya olanak sağlayan özellikleriyle daha iyisi çıkana kadar PHP geliştiricilerinin en başta kullandığı araçlardan biri olmayca devam edecek.