Розгортання статичного контенту Magento 2 (static content deploy) — це функція Magento, яка допомагає підтримувати досвід користувачів на найвищому рівні. Чому? Вона гарантує, що сторінки вашого магазину будуть правильно побудовані, файли статичного контенту будуть завантажені браузером, а статичний контент буде відображатись відповідно до запитів користувачів.

У цій статті ви знайдете все, що вам потрібно знати про розгортання статичного контенту в Magento 2: що це таке, навіщо його використовувати, як розгорнути статичний контент у Magento 2 трьома різними способами та, як скоротити час розгортання до нуля.

Крім того, ми розглянемо стратегії розгортання статичного контенту та приклади, які допоможуть вам краще зрозуміти цю функцію.

Зміст [приховати]

    Незалежно від того, чи тільки ви починаєте розробку на Magento, чи вже маєте певні знання, ця стаття допоможе відточити ваші навички або відкрити для себе щось нове про розгортання статичного контенту в Magento.

    Нам є багато чого розглянути, але давайте спочатку почнемо з основ.

    Огляд розгортання статичних файлів

    Розгортання статичних файлів (static view file deployment) дозволяє записувати статичні файли в систему Magento під час налаштування Magento для live режиму.

    Static —  відноситься до файлів, які можуть бути закешовані, якщо вони не генеруються динамічно, а view — до Model-View-Controller.

    Файли статичного контенту можна знайти в каталозі /pub/static (містить js, css, html та інші) або /var/view_preprocessed (містить файли phtml).

    Також важливо зазначити, що розгортання файлів статичного контенту визначається режимом роботи Magento:

    • У режимі за замовчуванням (default) і в режимі розробника (developer) Magento генерує статичні файли на вимогу та кешує решту файлів.
    • У режимі продакшн (production) статичні файли не генеруються і не кешуються, вам потрібно записати файли статичного контенту вручну за допомогою команди. Ми поговоримо про це пізніше.

    Навіщо розгортати статичний контент у Magento 2?

    Хоча розгортання статичного контенту в Magento 2 використовується лише розробниками, багатьом не технічним людям всерівно потрібно знати, навіщо він використовується та, як це сприяє покращенню досвіду користувача.

    Доступність статичного контенту

    Усі розширення Magento 2 розташовані в папці app або vendor. Це те, як у Magento працює файлова структура модулів. Відповідно, у браузера немає доступу до цих папок.

    Проте, модулі та теми всерівно можуть мати статичний контент, напр. CSS, зображення, JavaScript, які йдуть з розширенням і знаходяться в папках теми. Оскільки вони знаходяться в папках app та vendor, браузери не можуть завантажити ці статичні файли для того, щоб відобразити їх відвідувачам вашого магазину.

    Отже, розгортання статичного контенту дозволяє перемістити файли розширення в папку pub/static, щоб зробити їх доступними для завантаження у браузері.

    Коли Magento переносить файли до папки pub/static, він перевіряє, чи є ці файли переписаними у вашій темі або дочірній темі.

    Компільований LESS

    Браузери можуть читати лише CSS, тоді як більшість стилів написані на мові LESS. Отже, щоб браузер міг прочитати ці стилі, вам потрібно скомпілювати їх у CSS. Це ще одна причина чому вам потрібно використовувати розгортання статичного контенту, щоб зробити LESS зрозумілим для браузерів.

    Мініфікація HTML

    Якщо у вас в адмін панелі ввімкнено мініміфікацію HTML, розгортання статичного контенту в Magento підготує мініфіковані файли та перемістить їх у папку var/view_preprocessed.

    Отже, якщо ви вносите будь-які зміни в темплейти, JS, CSS, зображення або встановлюєте розширення Magento 2, ви повинні використовувати розгортання статичного контенту Magento, щоб зробити ці зміни доступними для браузера, щоб він міг завантажити та відобразити їх користувачам.

    Стратегії розгортання статичного контенту

    Незалежно від мети, з якою ви використовуєте розгортання статичного контенту, Magento 2 дозволяє вам включати різні стратегії його розгортання. Вони забезпечують різні результати розгортання і використовуються в різних випадках.

    Давайте розглянемо ці випадки та кожну із стратегій.

    Стандартна Standard

    Ця стратегія розгортання статичного контенту є стандартною та найбільш відомою. У випадку стандартної стратегії всі статичні файли для всіх пакетів розгортаються та обробляються \Magento\Framework\App\View\Asset\Publisher.

    Крім того, всі файли для довільної мови розгортаються в кожній темі.

    Швидка Quick

    Швидка стратегія працює так само, як і стандартна. Однак у всіх інших мовах у темі, за винятком довільної, визначаються та розгортаються файли, які заміняють розгорнуту тему.

    Інші файли копіюються з мови, де вже відбулось розгортання статичного контенту, оскільки вони вважаються подібними (незалежно від мови, області чи теми) для всіх мов.

    Назва швидкої стратегії говорить сама за себе. Хоча багато файлів дублюється в цьому методі, час, необхідний для розгортання для кількох мов, скорочується.

    Компактна Compact

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

    Потім файли розгортаються до підкаталогів на основі таких шаблонів:

    Шаблон Опис
    <area>/<theme>/<locale> Розгорнуті файли є унікальними для певної області, теми та мови.
    <area>/Magento/base/<locale> Розгорнуті файли є унікальними для певних областей і мов, але схожими для всіх тем.
    <area>/<theme>/default Розгорнуті файли є подібними для всіх мов певної теми та певної області.
    <area>/Magento/base/default Розгорнуті файли є унікальними для певної області, але схожими для всіх мов і тем.
    base/Magento/base/<locale> Розгорнуті файли є унікальними для певної мови, але подібними для всіх тем і областей.
    base/Magento/base/default Розгорнуті файли є подібними для всіх тем, областей і мов.

    Розгортання статичного контенту у Magento 2

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

    Як ми вже згадували, файли статичного контенту можна знайти в каталогах /pub/static або dir/var/view_preprocessed. Однак деякі файли потрібно записати в файлову систему Magento 2 вручну.

    У режимі розробника вам потрібно очистити старі файли CSS, JS, макета, щоб уникнути проблем зі статичними файлами та переконатися, що всі нові файли будуть правильно працювати у новому модулі.

    Існує кілька можливих способів, як ви можете очистити старі файли у Magento 2.

    Вручну

    Щоб розгорнути файли статичного контенту в Magento 2 вручну:

    1. Увійдіть на ваш сервер Magento під власником файлів — file system owner. 
    2. Видаліть усі файли з папки /pub/static. Не видаляйте файл .htaccess
    3. Виконайте команду для розгортання статичного контенту:
    bin/magento setup:static-content:deploy

    Примітка: каталог pub/static має бути доступним для запису (pub/static directory must be writable), якщо ви ввімкнули об’єднання файлів статичного контенту в адмін панелі. Якщо pub/static недоступний для запису, static-content:deploy не запускатиметься.

    Static Content Deploy in Magento 2

    Професійна порада: ми рекомендуємо видаляти лише наступні файли з папки pub/static:

    pub/static/_cache
    pub/static/deployed_version.txt
    pub/static/frontend
    pub/static/adminhtml
    pub/static/_requirejs

    Автоматично

    Magento також дозволяє очистити згенеровані файли статичного контенту з адмін панелі. Вам просто потрібно перейти у Systems > Tools > Cache Management та натиснути кнопку Flush Static Files Cache.

    Flush Static Files Cache

    Via CLI Command

    Запуск розгортання статичного контенту за допомогою CLI команди є найпоширенішим способом очищення файлів статичного контенту в Magento 2.

    Як правило, для розгортання статичного контенту використовується наступна CLI команда:

    bin/magento setup:static-content:deploy

    Однак це може залежати від різних параметрів, які потрібно використовувати. Жоден з них не є обов’язковим, але ми розглянемо їх усі, щоб допомогти вам краще зрозуміти, як можна варіювати опції розгортання статичного контенту в Magento.

    Опція Опис команди
    -l

    -- language Генерує файли для вказаних вами мов. За замовчуванням розгортання статичного контенту генерує файли для всіх мов.
    --exclude-language Генерує файли для всіх мов, крім тої, яку ви виключите.
    -t

    --theme <theme> Генерує файли для вказаних тем. За замовчуванням файли генеруються для всіх тем.
    --exclude-theme <theme> Генерує файли для всіх тем, крім тої, яку ви виключите.
    -a --area Генерує файли для всіх зазначених областей (adminhtml або frontend). За замовчуванням файли генеруються для всіх областей.
    --exclude-area Генерує файли для всіх областей, крім виключених.
    -j

    --jobs  Вмикає паралельну обробку з заданою кількістю завдань. Значенням за замовчуванням — 0, що не запускає паралельну обробку.
    --symlink-locale Створює символічні посилання для мов, які не мають кастомізацій і передаються для розробки.
    --content-version=CONTENT-VERSION Використовує кастомну версію статичного контенту, щоб переконатися, що версія статичного контенту ідентична, а кешування працює добре при розгортанні на кількох вузлах.
    --no-javascript Не розгортає JavaScript файли.
    --no-css Не розгортає файли CSS.
    --no-less Не розгортає LESS файли.
    --no-images Не розгортає зображення.
    --no-fonts Не розгортає файли шрифтів.
    --no-html Не розгортає файли HTML.
    --no-misc Не розгортає інші типи файлів (.md, .jbf, .csv, .json, .txt, .htc, .swf).
    --no-html-minify Не мініфікує файли HTML.
    - s - s quick Використовує швидку стратегію розгортання. Цей параметр використовується за замовчуванням, якщо нічого іншого не вибрано.
    - s standard Використовує стандартну стратегію розгортання для розгортання всіх файлів у всіх пакетах.
    - s compact Використовує компактну стратегію розгортання.
    --no-parent --no-parent Не створює файли для батьківських або дочірних тем. Рекомендується використовувати цей параметр, якщо ви не використовуєте свою батьківську або поточну тему, щоб пришвидшити часу розгортання.
    -f -- force Розгортає файли в будь-якому режимі. За замовчуванням працює тільки в продакшн режимі.

     

    Це досить великий список. Очевидно, ви не будете використовувати всі параметри в одній команді. Однак існують різні варіанти їх використання, які ви можете розглянути.

    Приклади розгортання статичного контенту

    Тепер, коли ви знаєте, чому використовується розгортання статичного контенту, які існують стратегії, давайте заглибимося в розробку та перевіримо приклади того, як можна запустити команди розгортання статичного контенту.

    Розгортання статичного контенту у певній темі

    Коли ви запускаєте розгортання статичного контенту за замовчуванням, він розгортає всі файли на всі теми, що потребує часу. Щоб запустити його лише для певної теми, використовуйте наступні параметри.

    bin/magento setup:static-content:deploy --theme="ThemeVendor/themename"

    Або якщо ви хочете виключити певну тему з розгортання:

    bin/magento setup:static-content:deploy --exclude-theme="ThemeVendor/themename"

    Розгортання статичного контенту у режимі розробника

    Професійна порада: якщо ви використовуєте розгортання статичного контенту лише для встановлення, оновлення або видалення розширень Magento 2, ви можете просто запустити:

    php bin/magento setup:static-content:deploy -f

    Розгортання статичного контенту на певній темі

    При розробці у вас можуть виникати різні проблеми з розгортанням статичного контенту. Тому, якщо ви використовуєте різні мови, ми рекомендуємо запустити його для певних мов.

    bin/magento setup:static-content:deploy de_DE

    Розгортання статичного контенту в Magento 2 є дуже гнучким, тому ви можете комбінувати різні параметри під час розгортання файлів у файловій системі Magento.

    Наприклад, ви можете запустити розгортання в режимі за замовчуванням або в режимі розробки для певної теми та мови.

    bin/magento setup:static-content:deploy -f --theme="ThemeVendor/themename" de_DE

    Окрім цього, ви можете виключити всі шрифти та CSS з розгортання на певній мові.

    bin/magento setup:static-content:deploy de_DE --no-css --no-fonts

    Існує багато інших комбінацій параметрів, які ви можете використовувати залежно від вашого випадку. Ви обов’язково скористаєтеся певними з них.

    Помилки у розгортанні статичного контенту

    Найпоширеніші проблеми з розгортанням статичного контенту пов’язані з дозволами та користувачами, яким надано право виконувати команди розгортання. Одним з таких є bash: bin/magento: Permission denied.

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

    Однак є ще одна проблема з якою ви можете стикнутись:

    ERROR: You need to install the Magento application before running this utility.

    Щоб виправити її вам слід:

    1. Встановити Magento за допомогою CLI або setup wizard.
    2. Увійти на сервер Magento як власник файлової системи (file system owner).
    3. Видалити усі файли з каталогу pub/static, крім файлу .htaccess.
    4. Виконати команду розгортання статичного контенту:
    bin/magento setup:static-content:deploy

    Зменшіть downtime під час розгортання статичного контенту

    Зазвичай системі потрібен деякий час для розгортання статичного контенту в системі Magento. Дуже часто час розгортання пов’язаний із простоєм (downtime) веб-сайту.

    Оскільки ви вже знаєте, існують різні стратегії розгортання. Деякі дозволяють виконувати розгортання швидше, ніж інші, але ви не можете повністю уникнути простою, що погано для досвіду користувачів.

    Отже, вам слід розглянути більш ефективні способи розгортання статичного контенту в Magento 2. Перегляньте ці команди для zero downtime deployment, щоб уникнути простоїв і забезпечити безперебійний досвід для ваших користувачів.