composer drupal 8

Composer ile Drupal projesini geliştirirken Composer komutlarıyla modül ve temaları kurabilirsiniz, ayrıca bu modülleri ve temaları composer komutlarıyla yeni versiyonuna güncelleyebilirsiniz.

Bu yazıda aşağıdaki konuyu inceleyeceğiz:

  • Drupal projesi için adım adım uygulanacak sık kullanılan Composer komutların kullanımı
  • Composer ile Drupal projesinin (core, modül, tema, profil, vb.) kurulumu ve günlenmesi
  • Mevcut uygulamayı Composer kullanımlı uygulamaya dönüştürmek

Bu yazının sonunda Composer ile Drupal modülleri ve temalarını kurmayı ve güncellemeyi öğrenmiş olursunuz.

Hedef

Composer tabanlı Drupal projesi oluşturmak ve Drupal modül ve tema kurulumu.

Önkoşullar

  • Composer'in en son sürünümü. composer self-update komutu ile Composer'i güncelleyebilirsiniz.
  • Mevcut Drupal Projesi için composer.json dosyasını oluşturunuz.
  • Mevcut Drupal Projesi için bütün komutları projesnin ana yolunda çalıştırınız.

Yeni Drupal Projesi Oluşturma

Composer ile Drupal projesini oluşturmanın en kolay yolu şablon kullanmaktır. Composer'in create-project komutunu bunun için kullanacağız. composer create-project some/project komutunu çalıştırdığınızda bu komut some/project şablonunu klonlayarak yeni projenizi oluşturur.

Sizin projeniz some/project tabanlı proje olacak. Örneğin, some/project'teki composer.json dosyası oluşturduğunuz projenin başlangıcı olacak. Bundan sonra some/project projesi sizin projenize her hangi bir etkisi olmayacak.

Drupal.org sitesinden bazı popüler Composer ile Drupal projesi oluşturma şablonu bulabilirsiniz. NOT: drupal/drupal projesi kullanımdan kaldırılmıştır ve tavsiye edimemektedir.

Bu yazı'da en çok tavsiye edilen ve çok kullanılan drupal-composer/drupal-project projesini kullanacağız. Bu şablon Composer ile Drupal projesi geliştirmemiz için yeterli konfigürasyon sağlamaktadır.

drupal-composer/drupal-project şablonunu kullanarak Drupal projesi geliştirmek için aşağıdaki komutu çalıştıralım:

$ composer create-project drupal-composer/drupal-project:8.x-dev my-project --stability dev --no-interaction
$ cd my-project

Daha fazla bilgi için drupal-composer/drupal-project projesinin dokümantasyonuna bakabilirsiniz.

Mevcut bir Drupal uygulamasını yönetmek için Composer'ı kullanmaya başlayalım

Composer ile yönetilmeyen bir Drupal projesini Composer ile yönetmeye başlamak başta biraz zor gelebilir. Drupal projesini Composer ile yönetmenin tam yöntemi Drupal uygulamasının klasör yapısına bağlı ve bazı ek adım gerektirebilir.

Drupal projesini Composer yapısına çevirme süreçini otomatikleştiren çok sayıda araç var:

  1. Composerize Drupal composer eklentisi (önerilen)
  2. Drupal Console'un composerize komutu.
  3. Composerize modülü.

Eğer yukarıdaki araçlarla başarısız olsanız aşağıdaki adımlarla yapabilirsiniz.

  1. .git klasörü olan klasöre terminal ile geçin. Komutları doğru dizinden yürütmeniz son derece önemlidir. Bazı projeler için, klasör doğrudan Drupal projesini içerebilir. Diğer projelerde Drupal projesi docroot/core ve web/core altında olabilir.
  2. composer.json dosyasını ve vendor klasörünü siliniz. Projenizde sadece bir tane composer.json dosyası ve vendor klasörü olmalıdır. Eğer eski veya kullanılmayan composer.json veya vendor klasörü varsa projeden siliniz.
$ cd drupal/projesinin/yeri
$ find . -name "composer.json" -exec rm -rf {} \;
$ find . -name "composer.lock" -exec rm -rf {} \;
$ find . -name "vendor" -exec rm -rf {} \;
Eğer komutlar başarılıysa ```No such file or directory.``` mesajini basilacaktir.
  1. Aşağıdakileri şablonu kullanarak yeni bir composer.json dosyası oluşturun:
{
  "name": "drupalprojem",
  "license": "proprietary",
  "type": "project",
  "repositories": {
    "drupal": {
      "type": "composer",
      "url": "https://packages.drupal.org/8"
    },
    "asset-packagist": {
      "type": "composer",
      "url": "https://asset-packagist.org"
    }
  },
  "require": {
    "composer/installers": "^1.2.0",
    "cweagans/composer-patches": "^1.6.4",
    "drupal/composerize": "1.x-dev",
    "drupal-composer/drupal-scaffold": "^2.4",
    "oomphinc/composer-installers-extender": "^1.1",
    "wikimedia/composer-merge-plugin": "^1.4.1"
  },
  "require-dev": {
    "drupal/console": "^1.0.2",
    "drush/drush": "^9.0.0"
  },
  "extra": {
    "enable-patching": true,
    "installer-types": ["bower-asset", "npm-asset"],
    "installer-paths": {
      "docroot/core": ["type:drupal-core"],
      "docroot/modules/contrib/{$name}": ["type:drupal-module"],
      "docroot/modules/custom/{$name}": ["type:drupal-custom-module"],
      "docroot/profiles/contrib/{$name}": ["type:drupal-profile"],
      "docroot/profiles/custom/{$name}": ["type:drupal-custom-profile"],
      "docroot/themes/contrib/{$name}": ["type:drupal-theme"],
      "docroot/themes/custom/{$name}": ["type:drupal-custom-theme"],
      "docroot/libraries/{$name}": ["type:drupal-library", "type:bower-asset", "type:npm-asset"],
      "drush/contrib/{$name}": ["type:drupal-drush"],
      "special/package/dir/": ["my/package"]
    },
    "merge-plugin": {
      "include": [
        "docroot/modules/custom/*/composer.json"
      ],
      "replace": false,
      "ignore-duplicates": true
    },
    "patches": {}
  },
  "minimum-stability": "dev",
  "prefer-stable": true
}

  • Yukarıdaki örnek, Drupal'ın bir docroot alt dizininde bulunduğunu varsayar. Dizin yapınızı doğru şekilde eşleştirmek için "docroot" içeren tüm dizeleri değiştirin.
  • "name" yerine projenizin ismi ile değiştirin
  • composer require drupal/core 8.6.0 komutu ile projenize Drupal Core ekleyiniz.

    Artık, uygun bir şekilde Drupal Core ve bir Drupal sitesini Composer ile yönetmek için gereken çeşitli eklentiler gerektiren işlevsel bir composer.json dosyanız var.

  1. Şimdi Composer ile module, tema, profil ve benzerlerini kurabilirsiniz. Bu, gözden geçirmenizi gerektiren manuel bir işlemdir.

    Projeye diğer modullerini eklemek için composer require drupal/[modul-ismi]. Bu yeni stabil versiyonu yükler veya önce kurulu ise versiyonunu yükseltir. Eğer versionu belirtmek isteseniz bunu composer require drupal/[modul-ismi] [versiyon] komutu ile gerçekleştirebilirsiniz.

    Bu komutu Drupalın bütün contrib modulu için çalıştırınız. Ayrıca diğer modulleri kurmak için çalıştırabilirsiniz. drush ile kurulan bütün modulleri listeleyebilirsiniz. Drush lokalinizde kurulu olması gerek. Drush Drupalın veritabanın sorgular ve kurulan modulleri listeler:

 $ ./vendor/bin/drush pml --no-core --status=enabled
 ---------------- --------------------------------------- --------- ----------------
  Package          Name                                    Status       Version
 ---------------- --------------------------------------- --------- ----------------
  Administration   Admin Toolbar (admin_toolbar)           Enabled      8.x-1.27
 ---------------- --------------------------------------- --------- ----------------
  1. En iyi standard çalışma gereği contrib modullerini versiyon kontrol'den (git) silelim.

    Yeni bir .gitignore veya var olan .gitignore dosyasına aşağıdaki satırları ekleyelim:

    docroot/core
    docroot/modules/contrib
    docroot/themes/contrib
    docroot/profiles/contrib
    docroot/libraries
    

    Ekledikten sonra aşağıdaki dosyaları versiyon kontrol'den silelim:

    git rm --cached docroot/core
    git rm --cached docroot/modules/contrib
    git rm --cached docroot/themes/contrib
    git rm --cached docroot/profiles/contrib
    git rm --cached docroot/libraries
    git rm --cached vendor
    

    Bu komutları çalıştırdığınız fatal: pathspec 'vendor' did not match any files hatası vermesiniz sebebi bu dosyaların klasör'de olmayışı. Bu normaldir.

Böylece Composer ile oluşturulmayan Drupal projesini Composer yapısına değiştirmiş olduk.

Composer ile Yeni Drupal Projesi Oluşturma

Drupal paketini kurmak için ilk önce yukarıdaki composer.json şablonu kullanarak aşağıdaki komutu çalıştırınız. En azından composer.json dosyasında repositories entry ve installer-paths konfigürasyonu olmalıdır.

$ composer require drupal/[proje]

Örneğin pathauto modulunu kurmak için:

$ composer require drupal/pathauto

Varsayılan olarak bu en son sürümü kurar, spesifik versiyonu kurmak için:

$ composer require drupal/pathauto 1.0.0

Bu komut hata verebilir eğer başka modullerin bağımlılığı uymuyorsa, bu durumda uyuyana kadar versiyonu değiştirerek kurabilirsiniz yada en son sürümü kurabilirisiniz. Ayrıca Composer dilinde "install" demek kodları yüklemek, composer.lock dosyasını güncellemek ve autoloader ile kodu kullanılabilir hale getirebilmek demektir. Yine de Drupal projesini arayüzden yada Drush ile Drupal veritabanına kurmanız gerekiyor.

Bağımlı Modulleri Güncellemek

Herhangi bir modulu güncellemek için:

composer update [vendor]/[package]

Örneğin drupal/pathauto güncellemek için:

$ composer update drupal/pathauto

Bu sadece drupal/pathauto modulunu günceller, ne kadar bu modulun bağımlı modulu olsa bile.

Bağımlı modulleri ile birlikte modulu güncellemek için:

$ composer update drupal/pathauto --with-all-dependencies

Minimum versiyonu belirterek güncellemek için:

$ composer require drupal/pathauto:^1.1.0 --update-with-all-dependencies

Bütün modulleri güncellemek için:

$ composer update

Herhangi bir Drupal projesini güncellerken olduğu gibi, yeni modulu indirdikten sonra veritabanı güncellemelerini gerçekleştirmelisiniz. Eğer Drupal Configuration Management kullanıyorsanız veritabanı güncellemeleri sonrası konfigürasyonları yeniden export etmelisiniz.

Drupal Core'u Composer ile Güncelleme

Drupal Core diğer moduller gibi Composer ile güncellenebilir. Yukarıdaki adımlarda olduğu gibi modul ismi yerine drupal/core belirterek komutları çalıştırarak güncelleyebilirsiniz. drupal/core için yeni bir minimum sürüm belirlemek iyi bir fikirdir, böylece bir düşürme işlemi asla yanlışlıkla gerçekleştirilmez.

Herhangi bir Drupal projesini güncellerken olduğu gibi, yeni modulu indirdikten sonra veritabanı güncellemelerini gerçekleştirmelisiniz.

Composer ile bir modülün bağımlılıklarını yükleme

Diyelim ki Composer ile kurmadığımız bir modül var. Bu modülün composer.json dosyasında listelenen bağımlılıkları nasıl kurarız? Bu soruyu soruyorsanız, aslında yanlış yoldasınız. Önce tüm Drupal projesini yönetmek için Composer'ı kullanmalı ve modülü Composer ile kurmalısınız. O zaman, bağımlılıkları sizin için otomatik olarak kurulacak.

Composer'ı kullanmaya alternatif olarak, eğer modül Ludwig'i destekliyorsa modülün bağımlılıklarını kurmak için Ludwig'i kullanabilirsiniz.