Composer ile modül kitaplığı bağımlılıklarını yönetme


9

Drupal-composer ile özel bir modülde Bağımlılıklar buldum , Composer Manager kullanmadan özel modülüme nasıl üçüncü taraf kitaplığı ekleyebilirim ve soruma bağlı olan drupal 8'e katkıda bulunan modülleri besteleyici bağımlılıkları nasıl yönetilir, ancak hayır Drupal 8.1 ve Composer yöneticisinin kullanımdan kaldırılmasından bu yana daha uzun süre geçerli gibi görünüyor .

Ayrıca , D8 ve Composer'ın kesin tanıtımı, besteci yöneticisinden de bahsettiği için artık geçerli değildir.

Besteci yöneticisine karşı olan diğer çözüm, çekirdek composer.json dosyasını değiştirmek çok fazla çekirdek korsanlığı gibi geliyor ve muhtemelen Drupal çekirdeğinin (?) Her Drush güncellemesiyle kırılacaktı.

Daha spesifik olarak, Views vCards'ı Drupal 7'den 8'e güncellemeye çalışıyorum. Composer.json dosyamı aşağıdaki gibi oluşturdum:

{
  "name": "drupal/views_vcards",
  "description": "Allows creation of vCards using the fields provided by the Views module.",
  "type": "drupal-module",
  "license": "GPL-2.0+",
  "homepage": "https://drupal.org/project/views_vcards",
  "require": {
    "maennchen/zipstream-php": "0.3.*"
  }
}

Ancak modül klasörüme bir composer.json dosyası koyarsam, Drupal'ın bu dosyanın orada olduğunu nasıl fark edeceğini ve gerekli zipstream-phpkitaplığın indirildiğinden nasıl emin olabilirim ?

composer updateDrupal kökünden çalıştırmak Drupal bağımlılıklarının çoğunu güncelleştirir, ancak modül klasörlerinde bulunan composer.json dosyalarını içermez. Ayrıca composer installbağımlılıkları olan tüm modüllerin içinden çağırmam gerektiğini de sanmıyorum .

Besteci yöneticisi ve / veya bilgisayar korsanı kullanmadan Drupal'ın bir modülün bağımlılığından nasıl haberdar olabilirim?

GÜNCELLEME:

Besteci birleştirme göbeği kullanılan eklentisi Joker yol destek sahip gibi görünmektedir:

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "composer.local.json",
                "extensions/*/composer.json" // < ---- THIS LINE
            ],
            "require": [
                "submodule/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "merge-dev": true,
            "merge-extra": false
        }
    }
}

Neden çekirdek birleşmiyor modules/*/composer.json, bu her şeyi doğru çözüyor?

Güncelleme 2:

Bunu desteklememenin gerekçesi, bu konuya da (bu da bir süredir sessiz kalmıştır) dahildir.


1
Ana besteci dosyasını düzenlemek düzeltilmiş yoldur.
Eyal

Bestecinin tüm bağımlılıklarınızı (çekirdek dahil) yönetmesine izin verirseniz, sorununuz ortadan kalkar. Bkz. Packagist.org/packages/drupal/core
Eyal

İşte başka bir soru için yazdığım örnek bir besteci dosyası: drupal.stackexchange.com/a/187097/40011
Eyal

@Eyal yanıtı için teşekkürler. Yani tüm katkıda bulunan modüllerin composer.jsondosya üzerinden yönetilmesi yeni tavsiye edilen yoldur ve modüllerin indirilmesi ve yüklenmesi için gereken acele değiştiriliyor mu? Açıkçası besteci iç içe bağımlılıkları otomatik olarak çözecek ve gerçekten de bağımlılıklarımı indirecektir.
Neograph734

Yanıtlar:


6

En iyi esneklik için drupal iskeleyi kullanan yeni yöntem

Drush> 9.0.0 kullanan Drupal 8.4.0 ve üstü için, drush make kullanımdan kaldırılmıştır ve aşağıdaki drupal.org dokümantasyon bağlantılarında ayrıntılı olarak açıklandığı gibi bir tam besteci iş akışı kullanmalısınız. Bu bağlantılar bir besteci projesi kullanmanızı önerir, ancak bu herkesin web sunucusu kurulumu için çalışmayabilir. Aşağıda, ayrıntılı açıklama için composer.json komutunun el ile nasıl kurulacağı adım adım anlatılmaktadır. Modüllerin manuel olarak eklenmesi ile ilgili talimatlar yine de yapılabilir.

# Initialize composer. Stability alpha is important for custom modules that may be source managed outside of packagist or drupal.org
composer init --name myvendor/mysite --stability=alpha --license=GPLv2
composer config repositories.drupal composer https://packages.drupal.org/8
composer config discard-changes true

Ardından, composer.json'a tercihlerinize göre manuel olarak aşağıdakileri eklemeniz gerekir , çünkü besteciyle olduğu gibi otomatik olarak bunu yapmanın bir yolu yoktur. Bunlar, modüllerinizi istediğiniz yere kurmak için drupal iskeleyi yapılandıracaktır (satıcıda / veya başka bir geliştirici tarafından seçilen bir dizinin aksine). 'Webroot'u' www 'veya' herkese açık 'olarak veya barındırıcınızın ne olduğunu değiştirin.

    "extra": {
        "installer-paths": {
            "webroot/core": ["type:drupal-core"],
            "webroot/modules/contrib/{$name}": ["type:drupal-module"],
            "webroot/modules/custom/{$name}": ["type:drupal-custom-module"],
            "webroot/themes/contrib/{$name}": ["type:drupal-theme"],
            "webroot/themes/custom/{$name}": ["type:drupal-custom-theme"],
            "webroot/profiles/{$name}": ["type:drupal-profile"],
            "webroot/libraries/{$name}": ["type:drupal-library"]
        },
        "patches": {}
    },
    "scripts": {
        "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
    }

Şimdi bazı bağımlılıklar yükleyebilirsiniz. Bestecinin bunun çalışması için komut dosyaları ve eklentiler kullanabilmesi gerektiğini unutmayın.

composer require composer/installers:^1.4.0 drupal-composer/drupal-scaffold:^2.3.0 cweagans/composer-patches:^1.6.2

Drupal-iskele komut dosyasını bir kez (veya derleme sunucunuzda gerektiği gibi) çalıştırın:

composer drupal-scaffold

Drupal çekirdek, modüller, temalar, vb ... drupal-merge-plugin olmadan aşağıdaki talimatlara göre monte edilebilir.

composer require drupal/core:~8.5.1 drupal/views_vcards

Drupal-merge-plugin kullanan veya doğrudan çekirdekle çalışan eski yöntem

Drupal 8.1.0 ve üstü için doğrudan Drupal modüllerine gereksinim duyan besteci kullanabilirsiniz. Drupal projesinde Composer'ı kullanma ve Drupal.org aracılığıyla Drupal paketlerini yüklemek için Composer'ı kullanma hakkındaki belgeler , drupal.org'un paketleyicisinden yararlanmak üzere güncellendi. Bir dağıtım senaryosunda zaten iyi çalıştığını düşünüyorum.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require drupal/views_vcards

Geliştirme için, elle bağımlılık manuel ekleme composer requireiyi çalışıyor düşünüyorum . Birleştirme yaklaşımı drupal-merge-plugin ile de çalışır ve bunu drush iş akışım için kullanırım.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require mile23/drupal-merge-plugin
composer update

Güncelleme 2016.06.22

Semver kullanarak geleneksel Drupal sürüm etiketlerini ve drupal.org paket URL'lerini ekleyen drush make'i kullanarak bir sorunla karşılaştım. Bu amaçla, hala geleneksel Drupal sürüm etiketlerini destekleyen https://packagist.drupal-composer.org adresindeki stabler paketini kullanmaya geçmem gerekiyordu .

Ayrıca derleme sunucusu veya makinenin , benzer bir geliştirme makinesinde besteci güncelleştirmesinin çalıştırılmasının mümkün olmadığı tüm senaryolarda gerekli olan bir besteci güncelleştirmesi (veya gereksinimi) için çok büyük miktarda bellek gerektirdiğini unutmayın.

Güncelleme 2016.09.23

Güncelleme 2018.03.30

  • Yukarı oy fark ettim. Bu oldukça eskidir, bu yüzden daha yeni gelişme ve sitenizi doğrudan besteci ile kurma konusunda karar vermeye karar vermiştir, çünkü drush make bir süre için (ne yazık ki) kullanımdan kaldırılmıştır.

1
Hala modülleri indirmek ve yüklemek için drush kullanmaya alışkınım, ancak bu tamamen besteci ile değiştirilecek mi?
Neograph734

Drupalci bunu şu şekilde yapıyor, ancak bundan önce birleştirme eklentisini doğrudan kullanabilirsiniz. Drupalci için yazdığım yama başlangıçta drupal.org/files/issues/2597778-composer-contrib-18.patch idi . Bu taahhüt edildi, ancak artık kod tabanında değil, paketleyiciyi kullanmak ve besteci iirc'den her şeyi yapmak basitleştirildi. TravisCI ile şunları da yaparım: cgit.drupalcode.org/xero/tree/.travis.yml#n40 . İş akışınıza bağlı olacaktır.
mradcliffe

Belki de Composer ile 3. parti kütüphaneler için Asset Packagist hakkında bir bulanıklık eklemeye değer. Bu metodoloji bir dizi Drupal dağıtımı tarafından benimsenmiştir ve şimdi birkaç katkı modülü de bunu kullanmaktadır. Bu çözümü resmileştirmek için bazı belgelere katkıda
bulundum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.