В каком случае нам нужно запустить эту команду 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 динамически загружает, когда вы работаете в режиме разработчика. Это вопрос как производительности, так и безопасности, и его полное обсуждение выходит за рамки данной статьи.