Magento 2: Minimalny plik kompozytora


9

Widziałem kilka rzeczy unoszących się w nietrwałym Internecie (np. Twitter), że niektóre ostatnie zmiany w Magento 2 umożliwiają instalację modułu w katalogu dostawcy za pośrednictwem kompozytora, a Magento 2 zobaczy twój moduł bez jakiejkolwiek wygłupiania symlinkowania .

Jeśli to prawda, czy jest jakiś „minimalny composer.json” plik, który programiści modułów mogą używać ze swoimi modułami, aby użytkownicy Magento 2 mogli je zainstalować w swoich systemach?


Możesz zajrzeć na github.com/magento/magento2/pull/1206 . Wierzę, że pozwoliło to modułom magento żyć u dostawcy.
Luke Rodgers

Odpowiedzi:


6

Aktualizacja

Wygląda na to, że kilka rzeczy uległo zmianie wraz z niektórymi najnowszymi zmianami (7 października) w branży deweloperskiej. Teraz wygląda na to, że można obsługiwać moduł znajdujący się w katalogu dostawcy.

Stworzyłem dwa przykłady instalacji modułów. Jeden, który kopiuje pliki do aplikacji / kodu, a drugi rejestruje moduł, w którym znajduje się w katalogu dostawcy.

Strategia kopiowania: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Strategia rejestracji: https://github.com/mttjohnson/magento2-sample-module-minimal-register

Dla celów programistycznych myślę, że wykorzystanie strategii rejestracji jest bardziej przydatne, ponieważ pliki uruchamiane przez Magento mogą być bezpośrednio modyfikowane, testowane, a następnie przekazywane z powrotem do repozytorium modułów.

Oryginalna odpowiedź

Jeśli masz composer.jsonplik pakietu modułu kompozytora, który zawiera typ, magento2-modulewówczas domyślnie pliki zostaną skopiowane do określonego zamapowanego katalogu w app/codekatalogu.

{
    "name": "vendorname/module-name",
    "type": "magento2-module",
    "require": {
        "magento/magento-composer-installer": "*"
    },
    "extra": {
        "map": [
            [
                "module",
                "VendorName/ModuleName"
            ]
        ]
    }
}

W tym przykładzie composer.json nazwa pakietu kompozytora vendorname/module-namespowoduje umieszczenie plików pakietu kompozytora vendor/vendorname/module-name.

Specjalny typ magento2-modulejest zaimplementowany jako wtyczka kompozytora w pakiecie magento / magento-composer-installer . Dlatego wymieniłem go w sekcji wymagania. To ta wtyczka kompozytora kopiuje pliki do odpowiedniego app/codekatalogu magento .

Do tej extra: {map: [["composerDir","MagentoDir"]]}sekcji odwołuje się instalator wtyczki kompozytora, aby dowiedzieć się, która część pakietu kompozytora ma zostać odwzorowana na część struktury katalogu magento. W podanym przykładzie wziąłoby to vendor/vendorname/module-name/modulei skopiowało pliki stamtąd do app/code/VendorName/ModuleName.


czy sekcja mapy jest tutaj? Zrozumiałem, że to żądanie ściągnięcia sprawiło, że nie trzeba było używać wtyczki, aby używać kompozytora z modułami Magento - że Magento sam szuka dostawcy. github.com/magento/magento2/pull/1206
Alan Storm

Czytając niektóre komentarze na dole wspomnianego PR, wygląda na to, że chociaż PR został scalony, nie w pełni obsługuje moduły znajdujące się w folderze dostawcy kompozytora.
mttjohnson

1

Wygląda na to, że coś takiego powinno wystarczyć.

{
    "name": "pulsestorm/module-name",
    "description": "A description of your extension",
    "authors": [
        {
            "name": "Robert Hoffner",
            "email": "rhoffner@example.com"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "Package\\Module\\": "src/path/to/Package/Module/Package/Module",
        },        
        "files": [
            "src/path/to/Package/Module/registration.php",
        ]
    }    
}

Kluczem tutaj jest sekcja autoloadera. Konfiguruje autoloader PSR-4, który wskazuje na twoje pliki klas i automatycznie ładuje twoje registration.php. Kiedy kompozytor upuści pliki u dostawcy i ponownie wygeneruje pliki autoload, Magento powinien widzieć twój moduł.

Jeden fajny efekt uboczny tego - kod już nie musi istnieć app/code!


Jestem tym zmieszany. Wszystko, co czytam o tworzeniu własnego modułu, powoduje, że umieszczam moje pliki w aplikacji / kodzie. 1) Jak to działa i 2) Dlaczego to jest schludne?
kevando
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.