magento 2 - In welchem ​​Fall müssen wir den Befehl magento setup: di: compile ausführen?

12

In welchem ​​Fall müssen wir diesen Befehl ausführen magento setup:di:compile?

MrTo-Kane
quelle
Sobald Sie neue Module installiert haben und einige Direktiven löschen möchten
Jaleel
und alles andere?
MrTo-Kane
Auch wenn Sie in den Produktionsmodus wechseln, da in diesem Modus kein statischer Inhalt generiert wird. Es ist alles serviert vonpub/static
Steve Johnson

Antworten:

8
  • 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.

    bin/magento setup:di:compile-multi-tenant

    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:compilejedes 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.

Fabian Schmengler
quelle
1
setup: di: compile-multi-tenant wurde entfernt
Antonino Bonumore
Können wir bitte eine Bestätigung bekommen, ob das Löschen des var / di-Ordners funktioniert? Es scheint nicht für mich
Wildcard27
@ Wildcard27 was ist, wenn du auch die Verzeichnisse in löschst var/generation?
Fabian Schmengler
@FabianSchmengler Habe gerade eine Actionzum testen erstellt. - Seite geladen, Fehler. - Gelöscht diund generationOrdner, neu geladen, funktioniert. - Neue Abhängigkeit hinzufügen, Seite neu laden, Fehler. Es wird jedoch kein diOrdner generiert. - generationErneut 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ühren setup:di:compile. Wenn jemand anderes dies bestätigen könnte, wäre das großartig.
Wildcard27
1

Nach meinem Kommentar zu einer anderen Antwort:

Sie können verhindern, dass der setup:di:compileBefehl nach jedem Hinzufügen einer Abhängigkeit ausgeführt wird, indem Sie einfach die Ordner var/diund löschen, bevor Sie die Seite neu laden .var/generation

Nach meinen eigenen Tests erstellt Magento den var/generationOrdner neu, aber nicht den var/diOrdner, bis er setup:di:compileerneut ausgeführt wird. Das heißt, Sie sollten nur den var/generationOrdner zum Löschen haben.

Witzigerweise funktioniert dies auch mit pub/static/*und setup: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:deployoder `setup: di: compile.

Als Referenz führe ich Version 2.1.5 aus .

Wildcard27
quelle
0

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

php bin/magento setup:di:compile

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.

Suresh Chikani
quelle
1
"Dies ist sowohl eine Leistungs- als auch eine Sicherheitssache, und eine ausführliche Diskussion darüber würde den Rahmen dieses Artikels sprengen." das gab es weg. eklatante Kopie von Alan Storm: alanstorm.com/magento_2_di_compile_pre-scan_with_commerce_bug
Fabian Schmengler