Magento2: Повторно генеруйте файл css у папці / папці static


51

Я встановив Magento 2 і встановив режим розробника, потім встановив один модуль, який містить файли css та js. Модуль працює добре, а файли css та js відображаються з папки / static. Тепер я змінив css у файлі css каталогу каталогу модулів та запустіть команду

php bin/magento setup:static-content:deploy

але Magento не вносить моїх нових змін у файли pub / static css, тому я отримую старий вміст файлів css. Хтось знає, як відновити весь файл css у папці / статичній папці?


8
FYI: Magento 2 має режим для розробників, тому вам не доведеться постійно розгортати статичний вміст. За останній місяць я витрачав години та години на перерозподіл статичного вмісту. Тож не будьте схожими на мене, і перейдіть до режиму розробника (на локальній машині. Ваш живий сервер повинен бути у режимі виробництва)
Натан Меррілл

навіщо регенерувати за допомогою іншої версії ??? У мене проблема з тим, що версія файлу розгортання не відповідає. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

3
Якщо magento знаходиться в режимі розробника, він створить символьні посилання на статичні файли, але для цього вам потрібно мати .htaccessфайл у pub/staticпапці, щоб він знав, як символізувати файли, якщо ви видалили папку pub / static, якої .htaccessзараз немає
Влад Патру

@NathanMerrill Ви маєте рацію, але більшість розробників не читають документацію та всі відповіді і все ще виконують команду статичний контент: розгорнути команду, і що сумно, це те, що деякі компанії з обліковим записом на Stackexchange надають відповіді так , марна трата часу
Влад Патру

Відповіді:


69

Перед видаленням pub / static зробіть резервну копію pub / static / .htaccess і відновіть її знову. інакше всі ваші css та js покажуть помилку 404!

  1. Видаліть pub/static[Зберігайте резервну копію .htaccess і скопіюйте її знову]
    1. Видалити var/cache
    2. Видалити var/composer_home
    3. Видалити var/generation
    4. Видалити var/page_cache
    5. Видалити var/view_preprocessed
    6. бігати php bin/magento setup:static-content:deploy

48
M2 не робить речі дуже зручними для розробників.
Меттью МакЛеннан

10
@CarComp жодні файли ніколи не потрібно видаляти вручну. Магенто повинен подбати про це. це дуже дратує
Клавді Кріанга

10
Ви повинні бути
новинкою

6
Я думаю, що, видаляючи pub / static, ви втрачаєте також файл .htaccess всередині, що важливо уникати 404 помилок, нормально видаляти підпапки pub / static, але це .htaccess має бути збережено
Elio Ermini

3
Я новачок у "магенто". ВАТ? Це офіційний спосіб оновлення css?
пучу

20

відповіді тут не згадують, що не слід видаляти .htaccess у папці pub / static.

щоб видалити всі файли, крім .htacces, увійдіть у папку / статичний каталог та запустіть

find . -depth -name .htaccess -prune -o -delete

тоді можна бігти

rm -rf var/cache/ var/generation/ var/page_cache/ var/view_preprocessed/ 

навіщо регенерувати за допомогою іншої версії ??? У мене проблема з тим, що версія файлу розгортання не відповідає. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

1
не працювало так, як очікувалося
Крістоф Ферребоуф

11

Я просто видалив файли css з pub/staticпапки і запустив команду:

php bin/magento setup:static-content:deploy

Він знову створить той самий файл із останніми змінами.


навіщо регенерувати за допомогою іншої версії ??? У мене проблема з тим, що версія файлу розгортання не відповідає. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

9

Оскільки питання стосується js and cssоновлення в Magento 2 в режимі розробника .

  1. Оновлення JS у вашому шановному модулі, перш ніж оновити сторінку того самого файлу, pub/static/frontend/namespace/theme/ ... module/js/...видаліть його, щоб після оновлення сторінки свіжий файл JS генерувався у папці pub.
  2. Оновлення CSS у вашому шанованому модулі, виконайте pt 1.
  3. Оновлення файлу менше

Тема налаштування в Магенто ...\dev\tools\grunt\configs\themes.js

Клоніруйте будь-яку тему, наприклад, тему luma до своєї теми та призначте ім'я, припустимо, xyz

xyz: {
        area: 'frontend',
        name: 'Magento/luma',
        locale: 'en_US',
        files: [
            'css/styles-m',
            'css/styles-l'
        ],
        dsl: 'less'
    }

У кореневій папці змініть ім'я файлу: Gruntfile.js.sample на Gruntfile.js

У кореневій папці змініть ім'я файлу: package.json.sample до package.json

Потрібно мати грунт у папці вашого сайту, інше встановити через npm

Відкрити командний рядок з дозволом адміністратора

grunt exec:themeПерший раз після розгортання теми перейдіть до папки сайту в CMD & команді hit

Тоді grunt less:theme кожен раз, якщо ми будемо робити якісь зміни, то менше

Якщо ви часто змінюєтесь із меншим використанням, grunt watchто це автоматично позначатиметьсяgrunt less:theme

Примітка. Можливо, ви отримаєте помилку Symlink, тому перейдіть до файлу .../app/etc/di.xmlта коментуйте або видаліть код (нижче коду) у вашому локальному до завершення розробки, не натискайте зв'язаний код цього файлу на сервер, він вимагається лише в локальному випадку, якщо потрібно.

<item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>

7

Простий спосіб 1

У Magento Admin. Перейдіть до System > Tools > Cache Managementі натисніть Очистити кеш статичних файлів .

Простий спосіб 2

Якщо ви просто змінили файл css, який вже існує , то вам потрібно просто видалити відповідний файл pub/static, тоді, коли ви оновите сторінку, він створить файл CSS нової версії. Він працює в режимі розробника .


Зауважте

  1. При створенні нового файлу, а не зміни існуючого файлу, вам може знадобитися очистити кеш, php bin/magento cache:flush.

  2. Режим за замовчуванням та режим розробника не потребують розгортання статичних файлів перегляду , оскільки статичні файли динамічно генеруються, а не матеріалізуються. (Довідка: Про режими Magento )

  3. У виробничому режимі вам також можуть знадобитися, php bin/magento setup:static-content:deployі php bin/magento cache:flushя ще не пробую режим виробництва .


6

Гаразд, виходячи з того, що я читав у різних інших публікаціях, і на моєму особистому досвіді є процес відновлення CSS або будь-якого статичного вмісту:

php bin/magento setup:upgrade

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

php bin/magento setup:di:compile

Потім файли будуть повторно компільовані. Нарешті:

php bin/magento setup:static-content:deploy

Після останньої команди все повинно бути новим і свіжим, просто оновіть сторінку.

----- Примітки ------

1) Переконайтеся, що ваші права доступу до файлу та власник: група користувачів встановлена ​​правильно, перш ніж робити це, можливо, вам доведеться поговорити про це з вашим sysadmin.

2) Якщо команда setup: upgrade не вдасться, вона може видалити файли і не зможе записати нові, як це було в моєму випадку через дозволи файлів. Це може зламати ваш сайт, просто виправити дозволи, а потім запустити команду.

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

Якщо хтось знає щось краще, дайте мені знати, тому що 12 хвилин компіляції файлів, тому що мені довелося внести деякі зміни в CSS, в моїх очах вкрай поганий дизайн.

--- Редагувати ---

Magento 2 має Grunt, прив'язаний до нього, і це робить оновлення CSS / LESS файлів нескінченно простішим, якщо ви знайдете час для його налаштування. Більшість файлів є у форматі .sample, просто видаліть розширення .sample, налаштуйте файл themes.js у папці / dev / tools / grunt / configs. Тоді, коли вам потрібно оновити ваші менші файли, ви просто запустіть грунт менше: - тема - з командного рядка.

Ресурс: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/css-topics/css_debug.html


Перестаньте надавати налаштування php bin / magento: static-content: метод розгортання, в режимі розробника magento має посилання
Влад Патру

О, і видалення папок вручну, видалення файлів .htaccess та інших пов’язаних між собою, і примушування до відновлення - це кращий метод ??? Я додав коментар щодо використання Grunt, оскільки просто переміщення вашого магазину в режим розробника не дає змоги створити всі посилання та оновити css під час перезавантаження сторінки.
Вальє

6

не забудьте запустити grunt exec:theme, grunt less:themeкоманди , де themeтема ви оголошені в themes.jsфайлі конфігурації з папки піхотинця (все це в керівництві для розробників) , і коли у вас є Magento в режимі розробника , ви не повинні виконати команду статичного розгортання Magento2працює зSymlinks


1
"коли у вас є magento в режимі розробника, ви не повинні запускати команду статичного розгортання" <- Це було дуже корисно для мене. Дякую! Я щойно видалив вміст паб / статичний каталог (за винятком .htaccess, звичайно), оновив сторінку і символи до моїх файлів css автоматично генерувалися. Тепер я можу редагувати їх на льоту. Хто сказав, що Magento 2 не є дружнім ?! Просто потрібно знати, як ним користуватися, мабуть.
Rooster242

1
Привіт, спасибі, товариш, менше бурча: проблема за замовчуванням вирішила проблему
Юсуф Ібрагім

6

Виконайте ці команди в кореневій папці Magento :

alias mage="php -d memory_limit=-1 -f bin/magento"

chmod -R 775 pub/static/ var/ pub/media/ &&
rm -rf var/view_preprocessed/ var/cache/ var/page_cache/ var/tmp/ var/generation/ pub/static/frontend/ ;
mage cache:flush &
mage indexer:reindex &
mage setup:upgrade &&
mage setup:static-content:deploy ; 
mage setup:db-data:upgrade &&
mage dev:source-theme:deploy &&
chmod -R 775 pub/static/ pub/media/ var/

Ніколи не думав запускати реіндекс у фоновому режимі 👍🏻
Сергій Філіпов,

Це я чи це ці команди Magento 1 у відповідь на питання Magento 2?
Баррі

Немає команд Magento 1, вони з Magento 2
Рафаель Корреа Гомес

6

У цьому питанні слід зробити одне важливе зауваження, яке більшість відповідей конкретно не вказує. У вашому випадку (за допомогою налаштування, яке ви використовуєте), причину, коли зміни CSS не отримують, коли ви регенеруєте CSS у pub/staticпапку, ви не видаляєте вміст var/view_preprocessedдиректора. Всередині цього каталогу є кешована версія вашої CSS, яка втягується в pub/staticпапку під час виконання php bin/magento setup:static-content:deployкоманди.

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

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

  1. Видаліть файли з pub/staticпапки:rm -rf pub/static/*

  2. Видаліть файли з var/view_preprocessedпапки:rm -rf var/view_preprocessed/*

  3. Перекомпілюйте статичну папку паба: php bin/magento setup:static-content:deploy

  4. Очистити кеш - це увімкнено: php bin/magento cache:clean

  5. Оновіть браузер.


1
Було б добре, якби magento2 робив би посилання на ті файли, які стосуються файлів у режимі розробника, а потім зміни в тих файлах модулів, де видно на льоту
roman204

Це так, але я не звів голову навколо того, коли і як, ос я це не відповів у відповіді. Є глобальні конфігураційні файли, які можуть встановити це у вашому файлі di.xml ( app/etc/di.xml). Але я мав неоднозначні результати під час тестування. Тут є трохи більше у другій відповіді: magento.stackexchange.com/questions/116605/…
circleix

5

Видаліть папку, що містить вашу тему, в
кеш- файлі pub / static / frontend clear
Ви можете використовувати grunt для перегляду таблиць стилів. Прочитайте тут


навіщо регенерувати за допомогою іншої версії ??? У мене проблема з тим, що версія файлу розгортання не відповідає. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

5
  1. Видалити паб статики.
  2. Дайте pub/staticдозвіл 777
  3. Очистити кеш.
  4. Виконати: php bin/magento setup:static-content:deploy

Ви побачите новий css.

ПРИМІТКА:

Надати належний дозвіл папок та файлів.

Я сподіваюся, що це вам допоможе.


"Ви побачите новий css." - Не, але дякую
Баррі

4

Не могли ви просто промити статичний кеш на панелі адміністратора, а потім

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

1

Переконайтеся, що ви використовуєте режим розробника.

Потім виконайте наступний код:

chmod -R 777 var generated pub/static
grunt exec:default
grunt less:your_theme_name

Оновіть сторінку фронту, ці кроки вирішили мою проблему.


приємно, мені це дуже допомагає
Yoesoff

0

Однак ви можете додати команду настройки -fабо --forceпрапор до команди настройки.

Приклад:

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

0

Я сюди кину свою краплину мудрості.

Я використовую cache_fly.shскрипт bash, який в основному робить:

#!/bin/bash
start=`date +%s%N`
./magento setup:upgrade && \ 
./magento cache:flush && \ 
./magento setup:static-content:deploy -f
end=`date +%s%N`
runtime=$(bc <<< "scale=9;($end-$start)/1000000000")
echo "" && echo "" && echo -e "\e[34mTOTAL EXECUTION TIME: \e[1m\e[93m$runtime\e[0m"

ПРИМІТКА: Я додав відлуння, щоб показати мені, скільки часу в моєму житті я витрачав, чекаючи, коли він запуститься. Також ./magentoє сценарій робити php bin/magentoабо викликати те саме, що знаходиться в контейнері docker, якщо докер використовується, ви можете зробити своє або вказати, php bin/magentoале якщо ви читаєте це, ви повинні знати, про що я говорю, якщо ні, будь ласка, запустіть запитання для допомоги.


0

Невелика адаптація для моєї справи

#!/bin/bash
start=`date +%s%N`
chmod -R 775 pub/static/ var/ pub/media/ && \
rm -rf var/view_preprocessed/* var/cache/* var/page_cache/* var/tmp/* var/generation/* pub/static/frontend/* && \
./magento cache:flush && \
./magento setup:upgrade && \
./magento cache:clean && \
./magento s:s:d es_ES en_US -f && \
./magento setup:di:compile && \
chmod -R 775 pub/static/ pub/media/ var/
end=`date +%s%N
runtime=$(bc <<< "scale=9;($end-$start)/1000000000")
echo "" && echo "" && echo -e "\e[34mTOTAL EXECUTION TIME: \e[1m\e[93m$runtime\e[0m"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.