magento 2 - Dans quel cas nous devons exécuter cette commande magento setup: di: compile?

12

Dans quel cas devons-nous exécuter cette commande magento setup:di:compile?

MrTo-Kane
la source
Une fois que vous avez installé de nouveaux modules et que vous souhaitez effacer certaines adresses
Jaleel
et rien d'autre?
MrTo-Kane
De plus, lorsque vous passez en mode production car dans ce mode, aucun contenu statique n'est généré; tout est servi à partir depub/static
Steve Johnson

Réponses:

8
  • Pendant le déploiement (c'est-à-dire lorsque des modifications ont été apportées à un système en mode production)

    Notez qu'en mode production (versions 2.0.5 et antérieures) vous devez utiliser la compilation "multi-tenant". Corrigé dans 2.0.6 et versions ultérieures.

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

    Voir: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html

  • Vous pouvez également utiliser la compilation en mode développement, ce qui devrait accélérer le site, mais d'un autre côté, cela ralentit le développement, car vous devrez exécuter bin/magento setup:di:compilechaque fois que vous ajouterez de nouvelles classes avec des dépendances (paramètres du constructeur) ou des dépendances modifiées des classes existantes .

    C'est facultatif, et ce n'est probablement pas une bonne idée. Si vous avez déjà exécuté la compilation dans votre environnement de développement, supprimez les fichiers var/dipour la désactiver.

Fabian Schmengler
la source
1
setup: di: compile-multi-tenant a été supprimé
Antonino Bonumore
Pouvons-nous s'il vous plaît obtenir une confirmation quant à savoir si la suppression de l'astuce dossier var / di fonctionne? Cela ne me semble pas
Wildcard27
@ Wildcard27 et si vous supprimez également les répertoires dans var/generation?
Fabian Schmengler
@FabianSchmengler Je viens de créer un Actiontest. - Chargement de la page, erreur. - Supprimé diet generationdossiers, rechargés, fonctionne. - Ajouter une nouvelle dépendance, recharger la page, erreur. Cependant aucun didossier n'est généré. - Supprimer à generationnouveau, recharger, fonctionne. Conclusion: supprimez le dossier de génération après avoir ajouté des dépendances et vous n'aurez pas à exécuter setup:di:compile. Si quelqu'un d'autre pouvait le confirmer, ce serait génial.
Wildcard27
1

Selon mon commentaire sur une autre réponse:

Vous pouvez éviter d'exécuter la setup:di:compilecommande après chaque fois que vous ajoutez une dépendance en supprimant simplement les dossiers var/diet avant de recharger la page .var/generation

D'après mes propres tests, Magento recréera le var/generationdossier, mais pas le var/didossier jusqu'à ce qu'il setup:di:compilesoit à nouveau exécuté. Cela signifie que vous ne devriez avoir que le var/generationdossier à supprimer.

Curieusement, cela fonctionne également avec pub/static/*et setup:static-content:deploy. En effet, Magento semble créer des liens symboliques vers les fichiers nécessaires si le contenu statique est créé par rechargement de page, plutôt que CLI.

Les employés de notre bureau ont rencontré des problèmes lors de l'exécution des commandes ci-dessus lors de l'utilisation de Docker pour Mac. Le traitement des fichiers était tout simplement trop lent. En utilisant les étapes ci-dessus, le développement devrait être beaucoup plus rapide.

Il est probablement préférable de noter que cela ne fonctionnera pas en mode production ou par défaut. C'est uniquement pour le développement. Comme mentionné par Fabian Schmengler, le rechargement initial de la page sera plus lent que la normale, mais ne devrait pas être aussi lent que l'exécution setup:static-content:deployou `setup: di: compile.

Pour référence, j'utilise la version 2.1.5 .

Wildcard27
la source
0

Tiré du blog d' Alan Storm .

Compilation d'injection de dépendance

Pour commencer, nous devons expliquer le problème que ces commandes tentent de résoudre. Lorsque vous expédiez un système Magento 2 en production, vous devez exécuter la commande suivante

php bin/magento setup:di:compile

Cette commande analyse le code de votre système et pré-génère un certain nombre de choses (principalement liées au système de gestion d'objets et à l'injection de dépendances) que Magento charge dynamiquement lorsque vous exécutez en mode développeur. Il s'agit à la fois de performances et de sécurité, et en discuter en détail dépasse le cadre de cet article.

Suresh Chikani
la source
1
"Il s'agit à la fois de performances et de sécurité, et en discuter en détail dépasse le cadre de cet article." cela l'a trahi. copie flagrante d'Alan Storm: alanstorm.com/magento_2_di_compile_pre-scan_with_commerce_bug
Fabian Schmengler