Можно ли предварительно сгенерировать код для одного конкретного модуля? IE - я могу сгенерировать весь код в системе с
php bin/magento setup:di:compile
Однако это может занять много времени. Я хотел бы предварительно сгенерировать только файлы для конкретного модуля.
php bin/magento setup:di:compile Pulsestorm_Commercebug
Конкретная проблема, которую я пытаюсь решить, заключается в том, чтобы обойти эту проблему, когда некоторые плагины не распознаются в режиме разработчика / по умолчанию.
Ответы:
Краткий ответ: Нет. Это невозможно с инструментами, поставляемыми с Magento сейчас.
Пояснение: мы должны различать генерацию и компиляцию кода . Компилятор делает оба. Для обеих операций нам нужно прочитать конфигурацию всех остальных модулей magento, иначе их вывод будет неправильным или не полным.
Компиляция для одного модуля не имеет смысла, так как magento не будет работать с скомпилированной конфигурацией только для одного модуля.
Генерация для одного модуля может иметь смысл, но нам все равно придется считывать сигнатуры конфигурации и конструктора со всех других установленных модулей. Без этого не весь код может быть сгенерирован. Так что такая операция не будет намного быстрее, чем полная компиляция. Мы могли бы подумать об этом, но я думаю, что ошибка, на которую вы ссылались, будет исправлена до того, как команда будет реализована.
источник
bin/magento
Исполняемый файл Magento - это просто компонент Symfony Console. Это означает, что вы можете найти отдельный файл, отвечающий за одну команду. Наименование всегда одинаковое, поэтому для настройки: di: compile вы можете найти DiCompileCommand.php (setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).Он всегда будет запускать
exeucte()
метод, так что нам нужно посмотреть. В этой функции вы увидите, что$operations
переменная установлена, которая заполняетсяgetOperationsConfiguration()
методом. Этот метод в основном сообщает DiCompileCommand, что компилировать.Первое, что я попробовал, это вернуть только часть генератора кода приложения, вот так;
Это прошло довольно хорошо, время компиляции было значительно сокращено;
В отличие от;
Конечно, этого следовало ожидать, так как мы вырезали несколько вещей. Но вы не указали, какие файлы вы хотите сгенерировать. Не все файлы могут быть сгенерированы для каждого модуля, так как, например, классы перехвата могут зависеть от нескольких модулей и, следовательно, могут дать вам ограниченный вывод функциональности, если вы запустите это только для одного модуля.
Вы можете найти ответственных генераторов здесь;
В каждом классе есть foreach, который позволит вам добавить if / else с оператором continue, пропускающим определенные модули / пути. Возможно, было бы полезно ознакомиться с документацией Symfony Console Component Input Arguments о том, как вводить аргументы в команду.
источник
вы можете узнать по
пакет> модуль> registration.php
и чем бежать
registration.php распознает модуль и скомпилирует ваш пользовательский модуль.
Я надеюсь, что это поможет вам.
источник
Когда вы измените свой конструктор для класса, который был сгенерирован в предыдущем запросе, он сломается. Если вы в таких потребностях просто удалите
var/cache
,var/generation
иvar/di
(если есть) и обновите страницу. Убедитесь, что режим является разработчиком, в котором вы работаете.(Я не говорю, что magento не будет компилировать или генерировать кодовую базу, да, так и будет. Делая так, это немного облегчает запуск «setup: di: compile» каждый раз, когда вы вносите изменения в свои маршруты или классы)
источник