magento 2 - У якому випадку нам потрібно запустити цю команду установки magento: di: compile?


12

У якому випадку нам потрібно запустити цю команду magento setup:di:compile?


Після того, як ви встановите нові модулі і хочете очистити деякі довідники
Jaleel

і що-небудь ще?
MrTo-Kane

Також при переході в режим виробництва, оскільки в цьому режимі не генерується статичний вміст; це все подано зpub/static
Стів Джонсон

Відповіді:


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

    Зауважте, що у виробничому режимі (версії 2.0.5 та новіших версій) ви повинні використовувати компіляцію "багатоорендарів". Виправлено в 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
установка: di: компіляція-багатокористувач була видалена
Антоніно Бонумор

Чи можемо ми отримати певне підтвердження, чи працює видалення трюку папки var / di? Мені це не здається
Wildcard27

@ Wildcard27 Що робити, якщо ви також видалите каталоги в var/generation?
Фабіан Шменглер

@FabianSchmengler Щойно створили Actionтест. - Завантажено сторінку, помилка. - Видалені diта generationпапки, перезавантажені, працюють. - Додати нову залежність, сторінку перезавантаження, помилку. Однак diпапка не створюється. - generationЩе раз видалити , перезавантажити, працює. Висновок: Видаліть генераційну папку після додавання залежностей і вам не доведеться запускати setup:di:compile. Якби хтось інший міг підтвердити це, це було б приголомшливо.
Wildcard27

1

Відповідно до мого коментаря до іншої відповіді:

Ви можете уникнути запуску setup:di:compileкоманди після кожного додавання команди, просто видаливши папки 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 .


0

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

Компіляція ін'єкційних залежностей

Для початку слід пояснити проблему, яку ці команди намагаються вирішити. Під час відвантаження системи Magento 2 до виробництва вам потрібно виконати наступну команду

php bin/magento setup:di:compile

Ці команди сканують код у вашій системі та попередньо генерують низку речей (в основному пов'язаних із системою керування об'єктами та введеннями залежностей), які Magento динамічно завантажує під час роботи в режимі розробника. Це і продуктивність, і безпека, і обговорення цього в повному обсязі виходить за межі цієї статті.


1
"Це і продуктивність, і безпека, і обговорення цього в повному обсязі виходить за межі цієї статті". це віддало його. кричуща
Fabian Schmengler
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.