Est-il possible de pré-générer du code pour un module spécifique? IE - Je peux générer tout le code du système avec
php bin/magento setup:di:compile
Cependant, cela peut prendre beaucoup de temps. Je voudrais pré-générer uniquement les fichiers d'un module spécifique.
php bin/magento setup:di:compile Pulsestorm_Commercebug
Le problème spécifique que j'essaie de résoudre est de contourner ce problème avec certains plugins non reconnus en mode développeur / par défaut.
Réponses:
Réponse courte: Non. Ce n'est pas possible avec les outils livrés avec Magento maintenant.
Explication: Nous devons distinguer la génération de code et la compilation . Le compilateur fait les deux. Pour les deux opérations, nous devons lire la configuration de tous les autres modules de magento, sinon leur sortie sera incorrecte ou incomplète.
Compiler pour un module n'a pas de sens, car magento ne fonctionnera pas avec la configuration compilée pour un seul module.
La génération pour un module peut sembler logique, mais nous devrons quand même lire les signatures de configuration et de constructeur de tous les autres modules installés. Sans cela, tout le code ne pourrait pas être généré. Donc, une telle opération ne serait pas beaucoup plus rapide qu'une compilation complète. Nous pourrions y penser, mais je pense que le bogue que vous avez mentionné sera corrigé avant que la commande ne soit implémentée.
la source
L'
bin/magento
exécutable de Magento est juste un composant de la console Symfony. Cela signifie que vous pouvez trouver le fichier individuel responsable d’une seule commande. Le nom est toujours le même, donc pour setup: di: compile vous pouvez trouver DiCompileCommand.php (setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).La
exeucte()
méthode sera toujours exécutée , c'est pourquoi nous devons l'examiner. Dans cette fonction, vous verrez qu'une$operations
variable est définie, qui est remplie par lagetOperationsConfiguration()
méthode. Cette méthode indique à la DiCompileCommand quoi compiler.La première chose que j'ai essayée est de ne renvoyer que la partie générateur de code d'application, comme ceci;
Cela s’est bien passé, le temps de compilation a été considérablement réduit;
Par opposition à;
Bien entendu, il fallait s'y attendre, car nous avons éliminé un certain nombre de choses. Mais vous ne l' avez pas spécifié que les fichiers que vous voulez avoir généré. Tous les fichiers ne peuvent pas être générés module par module car, par exemple, les classes d'interception peuvent dépendre de plusieurs modules et vous donneraient donc une sortie limitée de fonctionnalités si vous ne l'exécutiez que pour un module.
Vous pouvez trouver les générateurs responsables ici;
Chaque classe a une foreach, ce qui vous permettra d’ajouter un if / else avec un continuer à ignorer certains modules / chemins. Peut-être serait-il utile de consulter la documentation relative aux arguments d' entrée des composants de la console Symfony pour savoir comment introduire des arguments dans la commande.
la source
vous pouvez reconnaître par
package> module> registration.php
et que courir
registration.php reconnaîtra le module et complétera votre module personnalisé.
J'espère que cela t'aidera.
la source
Lorsque vous modifiez votre constructeur pour la classe générée dans la requête précédente, il est cassé. Si vous avez de tels besoins
var/cache
, supprimez-les simplementvar/generation
et , levar/di
cas échéant, actualisez la page. Assurez-vous que le mode est celui du développeur sur lequel vous travaillez.(Je ne dis pas de cette façon que magento ne compilera ni ne générera de code, oui, il le fera. Faire ainsi, cela soulage un peu de lancer "setup: di: compile" chaque fois que vous modifiez vos itinéraires ou vos classes)
la source