Magento 2: Minimale Composer-Datei

9

Ich habe ein paar Dinge im unbeständigen Internet gesehen (z. B. Twitter), dass einige kürzlich vorgenommene Änderungen an Magento 2 es ermöglichen, ein Modul über Composer im Herstellerverzeichnis zu installieren, und Magento 2 wird Ihr Modul ohne Symlink-Tomfoolery sehen .

Wenn dies zutrifft, gibt es eine "minimale composer.json" Datei, die Modulentwickler mit ihren Modulen verwenden können, damit Magento 2-Benutzer sie auf ihren Systemen installieren können?

Alan Storm
quelle
Vielleicht möchten Sie einen Blick auf github.com/magento/magento2/pull/1206 werfen . Es erlaubte Magento-Modulen, innerhalb des Anbieters zu leben, glaube ich.
Luke Rodgers

Antworten:

6

Aktualisieren

Es sieht so aus, als hätten sich einige Dinge mit einigen letzten Änderungen (7. Oktober) in der Entwicklungsbranche geändert. Es scheint nun möglich zu sein, ein Modul zu unterstützen, das sich im Herstellerverzeichnis befindet.

Ich habe zwei Beispiele für die Installation von Modulen erstellt. Eine, die Dateien in App / Code kopiert, und eine andere, die das Modul registriert, in dem es sich im Herstellerverzeichnis befindet.

Kopierstrategie: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Registrierungsstrategie: https://github.com/mttjohnson/magento2-sample-module-minimal-register

Für Entwicklungszwecke halte ich die Verwendung der Registrierungsstrategie für nützlicher, da die von Magento ausgeführten Dateien direkt geändert, getestet und dann wieder in das Modul-Repo übernommen werden können.

Ursprüngliche Antwort

Wenn Sie eine composer.jsonDatei für Ihr Modul-Composer-Paket haben, die einen Typ von enthält, magento2-modulewerden standardmäßig Dateien in ein angegebenes zugeordnetes Verzeichnis im app/codeVerzeichnis kopiert .

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

In diesem Beispiel führt composer.json zum Namen vendorname/module-namedes Composer-Pakets, in dem die Dateien für das Composer-Paket abgelegt werden vendor/vendorname/module-name.

Der spezielle Typ von magento2-moduleist als Composer-Plugin im Magento / Magento-Composer-Installer- Paket implementiert. Deshalb habe ich es im Abschnitt "Erforderlich" aufgeführt. Es ist dieses Composer-Plugin, das das Kopieren von Dateien in das entsprechende Magento- app/codeVerzeichnis übernimmt .

Der extra: {map: [["composerDir","MagentoDir"]]}Composer-Plugin-Installer verweist auf diesen Abschnitt, um zu erfahren, welcher Teil Ihres Composer-Pakets welchem ​​Teil Ihrer Magento-Verzeichnisstruktur zugeordnet werden soll. In dem bereitgestellten Beispiel würde dies vendor/vendorname/module-name/moduleDateien von dort nach kopieren app/code/VendorName/ModuleName.

mttjohnson
quelle
Ist der Kartenausschnitt hier richtig? Ich habe verstanden, dass diese Pull-Anfrage dazu geführt hat, dass Sie kein Plugin benötigen, um Composer mit Magento-Modulen zu verwenden - Magento würde sich selbst nach einem Anbieter umsehen. github.com/magento/magento2/pull/1206
Alan Storm
Wenn Sie einige der Kommentare am Ende der von Ihnen erwähnten PR lesen, sieht es so aus, als ob die PR zusammengeführt wurde und Module im Ordner des Composer-Herstellers nicht vollständig unterstützt.
Mttjohnson
1

Es sieht so aus, als ob so etwas den Trick machen sollte.

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

Der Schlüssel hier ist der Autoloader-Bereich. Es wird ein PSR-4-Autoloader eingerichtet, der auf Ihre Klassendateien zeigt und Ihre automatisch lädt registration.php. Wenn Composer die Dateien im Hersteller ablegt und die Autoload-Dateien neu generiert, sollte Magento Ihr Modul sehen können.

Ein netter Nebeneffekt davon - Code muss nicht mehr vorhanden sein app/code!

Alan Storm
quelle
Das verwirrt mich. Bei allem, was ich über das Erstellen meines eigenen Moduls gelesen habe, habe ich meine Dateien in App / Code abgelegt. 1) Wie funktioniert das und 2) Warum ist das ordentlich?
Kevando