Zarządzanie zależnościami biblioteki modułów za pomocą kompozytora

9

Znalazłem Zależności w module niestandardowym z drupal-kompozytorem , Jak mogę dołączyć bibliotekę innej firmy do mojego modułu niestandardowego bez korzystania z Composer Managera i Jak zarządzać zależnościami modułów kompozytora contrib na Drupal 8, które są związane z moim pytaniem, ale nie Wydaje się, że obowiązują już od czasu Drupal 8.1 i wycofania menedżera Composer .

Również popularne przewodniki, takie jak Ostateczne wprowadzenie do D8 i Composer, wydają się już nie mieć zastosowania, ponieważ wspominają także o menedżerze kompozytorów.

Inne rozwiązanie w przeciwieństwie do menedżera kompozytora, zmiana pliku core composer.json wydaje się być zbyt dużym hackowaniem rdzenia i prawdopodobnie zepsułby się przy każdej aktualizacji Drusha rdzenia Drupala (?).

Mówiąc dokładniej, próbuję zaktualizować widok vCard z Drupal 7 do 8. Utworzyłem plik composer.json w następujący sposób:

{
  "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.*"
  }
}

Ale jeśli umieszczę plik composer.json w folderze modułu, jak sprawić, aby Drupal wiedział, że plik ten istnieje i jak upewnić się, że wymagana zipstream-phpbiblioteka została pobrana?

Po prostu uruchomienie composer updatez katalogu głównego Drupal aktualizuje wiele zależności Drupal, ale nie obejmuje plików composer.json, które znajdują się w folderach modułów. Nie zakładam też, że powinienem dzwonić composer installz wnętrza wszystkich modułów z zależnościami.

Jak uświadomić Drupalowi zależność modułu bez korzystania z menedżera kompozytora i / lub rdzenia hakującego?

AKTUALIZACJA:

Kompozytor seryjnej plugin używany przez rdzeniowych wydaje się wspierać wieloznaczny ścieżkę:

{
    "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
        }
    }
}

Dlaczego scalanie rdzenia modules/*/composer.jsonnie rozwiązałoby problemu?

Aktualizacja 2:

Powód, dla którego nie popieramy tego, jest omawiany w tym numerze (który również od pewnego czasu jest cichy).

Neograph734
źródło
1
Edycja głównego pliku kompozytora jest poprawionym sposobem.
Eyal
Jeśli pozwolisz kompozytorowi zarządzać wszystkimi swoimi zależnościami (łącznie z rdzeniem), problem zniknie. Zobacz packagist.org/packages/drupal/core
Eyal
Oto przykładowy plik kompozytora, który napisałem na inne pytanie: drupal.stackexchange.com/a/187097/40011
Eyal
Dzięki za odpowiedź @Eyal. Więc zarządzanie wszystkimi modułami contrib za pomocą composer.jsonpliku jest nowym zalecanym sposobem i zastępowanie pobierania i instalowania modułów jest zastępowane? Oczywiście kompozytor automatycznie rozwiąże zagnieżdżone zależności, a nawet pobierze moje zależności.
Neograph734

Odpowiedzi:

6

Nowa metoda wykorzystująca rusztowanie Drupal dla największej elastyczności

W Drupal 8.4.0 i nowszych korzystających z drush> 9.0.0 make drush jest przestarzałe i powinieneś używać przepływu pracy pełnego kompozytora, jak opisano w linkach do dokumentacji drupal.org poniżej. Te linki zalecają korzystanie z projektu kompozytora, ale może to nie działać w przypadku konfiguracji każdego serwera WWW. Poniżej opisano krok po kroku sposób ręcznego ustawienia pliku composer.json w celu uzyskania szczegółowych wyjaśnień. Nadal można wykonać instrukcje dotyczące ręcznego dodawania modułów.

# 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

Następnie musisz ręcznie dodać do composer.json następujące elementy, zgodnie z własnymi preferencjami, ponieważ nie ma możliwości, aby zrobić to automatycznie z obecnym kompozytorem. Skonfigurują one drupal-scaffold, aby zainstalować moduły tam, gdzie chcesz (w przeciwieństwie do dostawcy / lub katalogu wybranego przez innego programistę). Zmień „webroot” na „www” lub „public” lub na nazwę swojego hosta.

    "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"
    }

Teraz możesz zainstalować niektóre zależności. Pamiętaj, że aby to zadziałało, kompozytor musi mieć możliwość korzystania ze skryptów i wtyczek.

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

Uruchom skrypt drupal-scaffold raz (lub w razie potrzeby na serwerze kompilacji):

composer drupal-scaffold

Rdzeń, moduły, motywy itp. Drupala można zainstalować zgodnie z poniższymi instrukcjami bez wtyczki drupal-merge.

composer require drupal/core:~8.5.1 drupal/views_vcards

Starsza metoda przy użyciu wtyczki drupal-merge lub bezpośredniej pracy z rdzeniem

W przypadku Drupal 8.1.0 i nowszych można użyć kompozytora, aby bezpośrednio wymagać modułów Drupal. Dokumentacja dotycząca korzystania z Composer w projekcie Drupal i korzystania z Composer do instalowania pakietów Drupal za pośrednictwem Drupal.org została zaktualizowana, aby skorzystać z pakietu drupal.org. Uważam, że działa dobrze już w scenariuszu wdrażania.

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

Dla rozwoju myślę, że ręczne dodawanie zależności z composer requiredziała dobrze. Metoda scalania działa również z wtyczką drupal-merge i używam tego do mojego drusha.

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

Aktualizacja 2016.06.22

Wystąpił problem z używaniem drush make, który dodał tradycyjne znaczniki wersji Drupal i adresy URL pakietów pakupist drupal.org za pomocą semver. W tym celu musiałem przejść do korzystania z pakietu stabler na https://packagist.drupal-composer.org , który nadal obsługuje tradycyjne tagi wersji Drupal.

Należy również pamiętać, że serwer kompilacji lub komputer wymaga nadmiernej ilości pamięci, aby wykonać aktualizację kompozytora (lub wymagać), co jest konieczne we wszystkich scenariuszach, w których uruchomienie aktualizacji kompozytora na podobnej maszynie programistycznej nie jest możliwe w procesie kompilacji.

Aktualizacja 2016.09.23

Aktualizacja 2018.03.30

  • Zauważyłem głos w górę. Jest to dość stary, więc postanowiłem wyjaśnić nowszy rozwój i konfigurację witryny bezpośrednio z kompozytorem, ponieważ drush make jest (niestety) przestarzałe.
mradcliffe
źródło
1
Nadal jestem bardzo przyzwyczajony do używania drush do pobierania i instalowania modułów, ale czy zostanie to całkowicie zastąpione kompozytorem?
Neograph734,
Tak właśnie robi teraz Drupalci, ale wcześniej można było użyć wtyczki scalania bezpośrednio. Łatka, którą napisałem dla drupalci na początku, to drupal.org/files/issues/2597778-composer-contrib-18.patch . Zostało to popełnione, ale teraz nie jest już w bazie kodu, ponieważ jest uproszczone w użyciu packagist i robieniu wszystkiego od kompozytora iirc. Robię również z TravisCI: cgit.drupalcode.org/xero/tree/.travis.yml#n40 . Będzie to zależeć od przepływu pracy.
mradcliffe
Być może warto dodać tu napis o Asset Packagist dla bibliotek firm zewnętrznych z Composer. Metodologia ta jest przyjmowana przez wiele dystrybucji Drupala i teraz korzysta z niej także kilka modułów contrib. Właśnie dostarczyłem trochę dokumentacji w celu oficjalizacji tego rozwiązania drupal.org/docs/develop/using-composer/… i drupal.org/docs/develop/using-composer/…
JamesWilson