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:
- Composerize Drupal composer eklentisi (önerilen)
- Drupal Console'un
composerize
komutu. - Composerize modülü.
Eğer yukarıdaki araçlarla başarısız olsanız aşağıdaki adımlarla yapabilirsiniz.
.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 projesidocroot/core
veweb/core
altında olabilir.composer.json
dosyasını ve vendor klasörünü siliniz. Projenizde sadece bir tanecomposer.json
dosyası ve vendor klasörü olmalıdır. Eğer eski veya kullanılmayancomposer.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.
- 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.
Ş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 bunucomposer 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
---------------- --------------------------------------- --------- ----------------
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.