magento 2 - В каком случае нам нужно запустить эту команду magento setup: di: compile?

12

В каком случае нам нужно запустить эту команду magento setup:di:compile?

MrTo-Kane
источник
После того, как вы установили новые модули и хотите очистить некоторые директории
Jaleel
и еще что-нибудь?
MrTo-Kane
Также, когда вы переключаетесь в производственный режим, потому что в этом режиме статический контент не генерируется; это все подается сpub/static
Стив Джонсон

Ответы:

8
  • Во время развертывания (т.е. когда были внесены изменения в систему в рабочем режиме)

    Обратите внимание, что в производственном режиме (версии 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чтобы отключить ее.

Фабиан Шменглер
источник
1
setup: di: compile-multi-tenant был удален
Антонино Бонумор
Можем ли мы получить подтверждение того, работает ли уловка с папкой var / di? Это не для меня
Wildcard27
@ Wildcard27, что делать, если вы также удалите каталоги var/generation?
Фабиан Шменглер
@FabianSchmengler Только что создали Actionдля тестирования. - Загрузил страницу, ошибка. - Удалил diи generationпапки, перезагрузил, работает. - Добавить новую зависимость, перезагрузить страницу, ошибка. Однако diпапка не создается. - Удалить generationснова, перезагрузить, работает. Вывод: удалите папку генерации после добавления зависимостей, и вам не нужно будет запускаться setup:di:compile. Если бы кто-то еще мог это подтвердить, это было бы здорово.
Wildcard27
1

Согласно моему комментарию на другой ответ:

Вы можете избежать запуска 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 .

Wildcard27
источник
0

Взято из блога Алана Шторма .

Компиляция инъекций зависимостей

Для начала, мы должны объяснить проблему, которую пытаются решить эти команды. Когда вы отправляете систему Magento 2 в производство, вам нужно выполнить следующую команду

php bin/magento setup:di:compile

Эта команда просматривает код в вашей системе и предварительно генерирует ряд вещей (в основном связанных с системой менеджера объектов и внедрением зависимостей), которые Magento динамически загружает, когда вы работаете в режиме разработчика. Это вопрос как производительности, так и безопасности, и его полное обсуждение выходит за рамки данной статьи.

Суреш Чикани
источник
1
«Это вопрос как производительности, так и безопасности, и его полное обсуждение выходит за рамки этой статьи». это дало это. вопиющая копия Алана Шторма: alanstorm.com/magento_2_di_compile_pre-scan_with_commerce_bug
Фабиан Шменглер,