In welchem Fall müssen wir diesen Befehl ausführen magento setup:di:compile
?
magento2
extensions
cli
MrTo-Kane
quelle
quelle
pub/static
Antworten:
Während der Bereitstellung (dh wenn Änderungen an einem System im Produktionsmodus vorgenommen wurden)
Beachten Sie, dass Sie im Produktionsmodus (Versionen 2.0.5 und früher) die "Multi-Tenant" -Kompilierung verwenden müssen. Behoben in 2.0.6 und höher.
Siehe: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html
Sie können die Kompilierung auch im Entwicklungsmodus verwenden, was die Site beschleunigen sollte, andererseits aber die Entwicklung verlangsamt, da Sie
bin/magento setup:di:compile
jedes Mal ausgeführt werden müssen, wenn Sie neue Klassen mit Abhängigkeiten (Konstruktorparameter) oder geänderte Abhängigkeiten vorhandener Klassen hinzufügen .Dies ist optional und wahrscheinlich keine gute Idee. Wenn Sie die Kompilierung bereits in Ihrer Entwicklungsumgebung ausgeführt haben, löschen Sie die Dateien in
var/di
, um sie zu deaktivieren.quelle
var/generation
?Action
zum testen erstellt. - Seite geladen, Fehler. - Gelöschtdi
undgeneration
Ordner, neu geladen, funktioniert. - Neue Abhängigkeit hinzufügen, Seite neu laden, Fehler. Es wird jedoch keindi
Ordner generiert. -generation
Erneut löschen , neu laden, funktioniert. Fazit: Löschen Sie den Generierungsordner, nachdem Sie Abhängigkeiten hinzugefügt haben, und Sie müssen ihn nicht ausführensetup:di:compile
. Wenn jemand anderes dies bestätigen könnte, wäre das großartig.Nach meinem Kommentar zu einer anderen Antwort:
Sie können verhindern, dass der
setup:di:compile
Befehl nach jedem Hinzufügen einer Abhängigkeit ausgeführt wird, indem Sie einfach die Ordnervar/di
und löschen, bevor Sie die Seite neu laden .var/generation
Nach meinen eigenen Tests erstellt Magento den
var/generation
Ordner neu, aber nicht denvar/di
Ordner, bis ersetup:di:compile
erneut ausgeführt wird. Das heißt, Sie sollten nur denvar/generation
Ordner zum Löschen haben.Witzigerweise funktioniert dies auch mit
pub/static/*
undsetup:static-content:deploy
. Dies liegt daran, dass Magento anscheinend Symlinks zu den Dateien erstellt, die benötigt werden, wenn der statische Inhalt durch erneutes Laden der Seite erstellt wird, und nicht durch CLI.Die Mitarbeiter in unserem Büro hatten Probleme, die oben genannten Befehle auszuführen, während sie Docker für Mac verwendeten. Die Dateiverarbeitung war einfach zu langsam. Mit den obigen Schritten sollte die Entwicklung viel schneller sein.
Es ist wahrscheinlich am besten zu beachten, dass dies im Produktions- oder Standardmodus nicht funktioniert. Dies ist nur für die Entwicklung. Wie von Fabian Schmengler erwähnt, ist das Neuladen der ersten Seite langsamer als normal, sollte aber nicht so langsam sein wie das Ausführen
setup:static-content:deploy
oder `setup: di: compile.Als Referenz führe ich Version 2.1.5 aus .
quelle
Entnommen aus Alan Storms Blog .
Abhängigkeitsinjektionskompilierung
Zunächst sollten wir das Problem erläutern, das diese Befehle zu lösen versuchen. Wenn Sie ein Magento 2-System an die Produktion senden, müssen Sie den folgenden Befehl ausführen
Dieser Befehl durchsucht den Code in Ihrem System und generiert eine Reihe von Dingen (hauptsächlich im Zusammenhang mit dem Objektmanagersystem und der Abhängigkeitsinjektion), die Magento dynamisch lädt, wenn Sie im Entwicklermodus ausführen. Dies ist sowohl eine Leistungs- als auch eine Sicherheitssache, und es würde den Rahmen dieses Artikels sprengen, dies vollständig zu diskutieren.
quelle