Ist es möglich, Code für ein bestimmtes Modul vorab zu generieren? IE - Ich kann den gesamten Code im System mit erzeugen
php bin/magento setup:di:compile
Dies kann jedoch lange dauern. Ich möchte nur die Dateien für ein bestimmtes Modul vorab generieren .
php bin/magento setup:di:compile Pulsestorm_Commercebug
Das spezifische Problem, das ich zu lösen versuche, besteht darin, dieses Problem zu umgehen, indem einige Plugins im Entwickler- / Standardmodus nicht erkannt werden.
Antworten:
Kurze Antwort: Nein. Dies ist mit den mit Magento gelieferten Werkzeugen derzeit nicht möglich.
Erklärung: Wir müssen unterscheiden Codegenerierung und Kompilierung unterscheiden . Der Compiler macht beides. Für beide Operationen müssen wir die Konfiguration aller anderen Magento-Module lesen, sonst ist ihre Ausgabe falsch oder nicht voll.
Das Kompilieren für ein Modul ist nicht sinnvoll, da Magento nicht mit kompilierten Konfigurationen für nur ein Modul funktioniert.
Die Generierung für ein Modul mag sinnvoll sein, aber wir müssen trotzdem die Konfigurations- und Konstruktorsignaturen aller anderen installierten Module lesen. Andernfalls wird möglicherweise nicht der gesamte Code generiert. Eine solche Operation wäre also nicht viel schneller als die vollständige Kompilierung. Wir könnten daran denken, aber ich denke, der Fehler, auf den Sie verwiesen haben, wird behoben, bevor der Befehl implementiert wird.
quelle
Magento
bin/magento
ausführbare Datei ist nur eine Symfony Console-Komponente. Dies bedeutet, dass Sie die einzelne Datei für einen einzelnen Befehl als verantwortlich ansehen können. Die Benennung ist immer gleich, so dass Sie für setup: di: compile die Datei DiCompileCommand.php (setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
) finden können.Die
exeucte()
Methode wird immer ausgeführt , daher müssen wir genau danach suchen. In dieser Funktion sehen Sie ein$operations
Variable gesetzt, die von dergetOperationsConfiguration()
Methode gefüllt wird . Diese Methode teilt dem DiCompileCommand grundsätzlich mit, was kompiliert werden soll.Das erste, was ich versucht habe, ist, nur den Teil des Anwendungscode-Generators wie folgt zurückzugeben.
Das lief ziemlich gut, die Kompilierungszeit wurde drastisch verkürzt;
Im Gegensatz zu;
Dies war natürlich zu erwarten, da wir eine Reihe von Dingen herausgeschnitten haben. Aber Sie haben nicht angegeben welche Dateien Sie generieren möchten. Nicht alle Dateien können auf Modulbasis generiert werden, da die Interception-Klassen beispielsweise von mehreren Modulen abhängig sein können und daher nur eine eingeschränkte Funktionsausgabe bieten, wenn Sie dies nur für ein Modul ausführen würden.
Die verantwortlichen Generatoren finden Sie hier;
In jeder Klasse gibt es ein foreach, mit dem Sie ein if / else hinzufügen können, mit dem Sie bestimmte Module / Pfade überspringen können. Vielleicht ist es hilfreich, die Dokumentation zu den Symfony Console-Komponenten-Eingabeargumenten zu lesen, um zu erfahren, wie Argumente in den Befehl eingegeben werden.
quelle
Sie können durch erkennen
package> module> registration.php
und dann rennen
registration.php erkennt das Modul und ergänzt Ihr benutzerdefiniertes Modul.
Ich hoffe, dies wird dir helfen.
quelle
Wenn Sie Ihren Konstruktor für die Klasse ändern, die in der vorherigen Anforderung generiert wurde, wird dies nicht mehr funktionieren. Wenn Sie in solchen Bedürfnissen sind, löschen Sie einfach
var/cache
,var/generation
undvar/di
(falls vorhanden) und die Seite aktualisieren. Stellen Sie sicher, dass es sich bei dem Modus um den Entwickler handelt, in dem Sie arbeiten.(Ich sage nicht auf diese Weise, dass Magento keine Codebasis kompiliert oder generiert, ja, das wird es. Auf diese Weise erleichtert es das Ausführen von "setup: di: compile" jedes Mal, wenn Sie Änderungen an Ihren Routen oder Klassen vornehmen.)
quelle