В каком случае нам нужно запустить эту команду magento setup:di:compile?
pub/static
В каком случае нам нужно запустить эту команду magento setup:di:compile?
pub/static
Ответы:
Во время развертывания (т.е. когда были внесены изменения в систему в рабочем режиме)
Обратите внимание, что в производственном режиме (версии 2.0.5 и более ранние) вы должны использовать компиляцию «multi-tenant». Исправлено в 2.0.6 и позже.
bin/magento setup:di:compile-multi-tenant
См. Http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html.
Вы также можете использовать компиляцию в режиме разработки, что должно ускорить работу сайта, но, с другой стороны, это замедляет разработку, поскольку вам придется запускать bin/magento setup:di:compileкаждый раз, когда вы добавляете новые классы с зависимостями (параметрами конструктора) или изменяете зависимости существующих классов .
Это необязательно, и это, вероятно, не очень хорошая идея. Если вы уже выполнили компиляцию в своей среде разработки, удалите файлы, var/diчтобы отключить ее.
var/generation?
Actionдля тестирования. - Загрузил страницу, ошибка. - Удалил diи generationпапки, перезагрузил, работает. - Добавить новую зависимость, перезагрузить страницу, ошибка. Однако diпапка не создается. - Удалить generationснова, перезагрузить, работает. Вывод: удалите папку генерации после добавления зависимостей, и вам не нужно будет запускаться setup:di:compile. Если бы кто-то еще мог это подтвердить, это было бы здорово.
Согласно моему комментарию на другой ответ:
Вы можете избежать запуска setup:di:compileкоманды после того, как каждый раз , когда вы добавляете depency, просто вычеркивания var/diи var/generationпапки перед загрузкой страницы .
Из моих собственных тестов Magento будет воссоздавать var/generationпапку, но не var/diпапку, пока не setup:di:compileбудет запущен снова. Это означает, что у вас должна быть только var/generationпапка для удаления.
Как ни странно, это также работает с pub/static/*и setup:static-content:deploy. Это потому, что Magento, кажется, создает символические ссылки на файлы, необходимые, если статический контент создается путем перезагрузки страницы, а не CLI.
У людей в нашем офисе были проблемы с запуском вышеуказанных команд при использовании Docker для Mac. Обработка файлов была слишком медленной. Используя описанные выше шаги, разработка должна быть намного быстрее.
Вероятно, лучше всего отметить, что это не будет работать в режиме производства или в режиме по умолчанию. Это только для развития. Как упомянул Фабиан Шменглер, начальная перезагрузка страницы будет медленнее, чем обычно, но не должна быть такой же медленной, как работа setup:static-content:deployили `setup: di: compile.
Для справки я использую версию 2.1.5 .
Взято из блога Алана Шторма .
Компиляция инъекций зависимостей
Для начала, мы должны объяснить проблему, которую пытаются решить эти команды. Когда вы отправляете систему Magento 2 в производство, вам нужно выполнить следующую команду
php bin/magento setup:di:compile
Эта команда просматривает код в вашей системе и предварительно генерирует ряд вещей (в основном связанных с системой менеджера объектов и внедрением зависимостей), которые Magento динамически загружает, когда вы работаете в режиме разработчика. Это вопрос как производительности, так и безопасности, и его полное обсуждение выходит за рамки данной статьи.