Muss ich mein Modul jedes Mal manuell überprüfen, wenn ich einen Teil des Magento-Kerncodes verwende und der Zeile composer.json die Zeile require: ... hinzufüge?
Ja, jedes Mal, wenn Sie in Ihrem Code etwas aus einem Kernmodul verwenden, müssen Sie es den Anforderungen Ihres Komponisten hinzufügen. Da Sie wahrscheinlich möchten, dass Ihre Ladereihenfolge nach dem Kernmodul liegt, würde ich auch vorschlagen, sie Ihrer module.xml
Datei im Sequenzabschnitt hinzuzufügen .
Oder gibt es ein automatisiertes Tool, das das für mich erledigt?
Ich bin noch keinem begegnet. Wenn ja, lass es mich wissen. Es müsste ein ziemlich ausgeklügeltes Tool sein und würde wahrscheinlich eine erhebliche Testabdeckung erfordern und dann eine Matrix verschiedener Versionen ausführen, um einen Arbeitssatz zu erstellen.
Wie gebe ich eine Version an, die in meine composer.json aufgenommen werden soll? Sollte es die spezifische Modulversion sein, gegen die ich entwickelt habe? Oder sollte es eine Art Wildcard geben? Oder muss ich eine Entscheidung treffen, die auf Kompromissen basiert? Wenn ja, welche Kompromisse ergeben sich für die einzelnen Versionsarten?
Optionen zum Definieren einer Versionsnummer
100.0.2
Funktioniert nur mit dieser speziellen Version
100.0.*
*
ein Platzhalter ist und kann mit jeder Versionsnummer ersetzt werden
100.0.0
, 100.0.1
, ...
,100.0.120
~100.0.2
Ergibt 2 ein Platzhalter, der nur so gehen kann 100.0.2
, 100.0.3
, ...
,100.0.120
^100.0.2
Gestattet loslassen bis 101 so 100.0.2
, 100.0.3
, ...
, 100.1.0
,100.2.5
Für die Optionen 2 bis 4 würde es, wenn Ihre Stabilitätseinstellungen dies zulassen, auch Versionen wie enthalten 100.0.1-beta
Praktischer Nutzen
Option 1.) ist die vorsichtigste Option. Sie wissen, gegen welche Version Sie entwickelt haben, und akzeptieren nur die Arbeit mit dieser bestimmten Version. Ihr Modul kann in dieser Version nur neben diesem bestimmten Modul installiert werden. Alle anderen Installations- / Upgrade-Versuche schlagen fehl, wenn eine Composer-Meldung angezeigt wird, dass keine installierbaren Komponenten gefunden werden können.
Option 2.) Ich denke, kann als Nicht-Option betrachtet werden, wie in Option 3.) abgedeckt, wenn Sie es wie verwenden ~100.0.0
Option 3.) Seien Sie kompatibel, solange keine neuen Funktionen eingeführt werden
Option 4.) Seien Sie kompatibel, solange keine Änderungen vorgenommen werden
Kompromisse
1 Ihre Erweiterung funktioniert nur für eine Version eines Magento-Moduls (technisch gesehen sollte sich die Versionsnummer nicht erhöhen, wenn sich an einem Modul keine Änderungen ergeben, und mehrere Magento Project-Versionen könnten theoretisch dasselbe Magento-Kernmodul mit derselben Version enthalten. Praktisch I. habe dies nicht gesehen und es sieht so aus, als ob einige Prozessänderungen am Magento-Ende erforderlich sind (siehe hier). Da Sie so eng mit einer Version des Magento-Kernmoduls verbunden sind, erhalten Sie viele Releases und Versionen Ihrer eigenen Erweiterung, wenn Sie kompatibel bleiben möchten.
3-4 Ihre Erweiterung funktioniert mit mehreren Versionen von Magento und Sie müssen nicht jedes Mal, wenn Magento eine neue Version veröffentlicht, unterschiedliche Versionen Ihrer Erweiterung veröffentlichen. Der Nachteil hierbei ist, dass Sie Kompatibilität beanspruchen, obwohl in Magento eine Änderung eingeführt werden könnte, die nicht mit Ihrem eigenen Code kompatibel ist. Dieses Risiko ist real, da Magentos Definition der semantischen Versionierung für ihre eigenen Modulversionen sich nur auf das erstreckt, was mit einer @api
Anmerkung (mehr dazu in dieser GitHub-Ausgabe ) mit begrenztem Umfang gekennzeichnet ist.
tl; dr;
100.0.2
Gehen Sie auf Nummer sicher, es gibt viele Releases, die Sie für
^100.0.2
Semantic Versioning benötigen, weniger Releases für Sie, aber mit einem höheren Risiko aufgrund des derzeit begrenzten Umfangs an @api
kommentierten Klassen und Methoden. Wenn Sie eine Erweiterung hätten, die zu 100% sanktionierte Klassen und Methoden verwendet, wäre dies die offensichtliche Wahl.