Magento2: заново сгенерировать файл css в папке pub / static


51

Я установил Magento 2 и установил режим разработчика, затем я установил один модуль, содержащий файлы css и js. Модуль работает нормально, а файлы CSS и JS отображаются из папки pub / static. Теперь я сделал css изменения в каталоге css файла модуля и выполнил команду

php bin/magento setup:static-content:deploy

но Magento не вносит мои новые изменения в файлы pub / static css, поэтому я получаю старое содержимое файла css. Кто-нибудь знает, как восстановить весь файл CSS в папке pub / static?


8
К вашему сведению: Magento 2 имеет режим разработчика, поэтому вам не нужно постоянно развертывать статический контент. Я потратил часы и часы в прошлом месяце на повторное развертывание статического контента. Так что не будьте как я, и переключитесь в режим разработчика (на вашем локальном компьютере. Ваш работающий сервер должен быть в рабочем режиме)
Натан Меррилл

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

3
Если magento находится в режиме разработчика, он будет создавать символические ссылки на статические файлы, но для этого вам необходимо иметь .htaccessфайл в pub/staticпапке, чтобы он знал, как создавать символические ссылки на файлы, если вы удалили папку pub / static, которая .htaccessсейчас отсутствует
Влад Патру

@NathanMerrill вы так правы, но большинство разработчиков не читают документацию и все ответы и все еще запускают команду static-content: deploy, и что несколько печально, что некоторые компании, имеющие учетную запись в 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 никакие файлы никогда не должны быть удалены вручную. magento должен позаботиться об этом. это очень раздражает
Клавдиу Крянгэ

10
Вы должны быть
новичком в magento

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

3
Я новичок в "magento". WAT? Это официальный способ обновления CSS?
Пучу

20

ответы здесь не упоминают, что вы не должны удалять .htaccess в папке pub / static.

чтобы удалить все файлы, кроме .htacces, войдите в каталог pub / static и запустите

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 в вашем уважаемом модуле, выполните пункт 1.
  3. Обновление файла Less

Настройка темы в magento ...\dev\tools\grunt\configs\themes.js

Клонируйте любой пример темы luma theme к вашей теме и присвойте ей имя, предположим, 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

Нужно иметь grunt в папке вашего сайта, иначе установить через npm

Откройте командную строку с правами администратора

Перейти к папке сайта в CMD и нажать команду grunt exec:themeвпервые после развертывания темы

Тогда grunt less:theme каждый раз, если мы делаем какие-либо изменения в менее

Если вы делаете частые изменения в меньшем количестве использования, то grunt watchэто будет автоматический ударgrunt less:theme

Примечание: вы можете получить ошибку Symlink, поэтому перейдите к файлу .../app/etc/di.xmlи закомментируйте или удалите код (ниже кода) в вашей локальной системе до завершения разработки, не передавайте chnaged-код этого файла на сервер, он требуется только локально при необходимости.

<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) Убедитесь, что ваши права доступа к файлу и владелец: группа пользователей настроена правильно, прежде чем делать это, вам, возможно, придется поговорить об этом с вашим системным администратором.

2) Если ваша команда setup: upgrade не удалась, она может удалить файлы и не сможет записать новые, как это было в моем случае из-за прав доступа к файлам. Это может сломать ваш сайт, просто сгладить разрешения, а затем снова запустить команду.

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

Если кто-то знает что-то лучше, дайте мне знать, потому что 12 минут компиляции файлов, потому что мне пришлось внести некоторые изменения в CSS, на мой взгляд, очень плохой дизайн.

--- Редактировать ---

В Magento 2 подключен Grunt, и это значительно упрощает обновление файлов CSS / LESS, если вы потратите время на его настройку. Большинство файлов находятся в виде файлов .sample, просто удалите расширение файла .sample, настройте файл themes.js в папке / dev / tools / grunt / configs. Затем, когда вам нужно обновить ваши файлы LESS, вы просто запускаете grunt less: - theme-- из командной строки.

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


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

Да, и удаление папок вручную, удаление файлов .htaccess и других, не связанных, и принудительное восстановление - лучший метод ??? Я добавил комментарий об использовании Grunt, потому что простой перевод магазина в режим разработчика не создает все символические ссылки и не обновляет ваши CSS при перезагрузке страницы.
Vallier

6

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


1
«когда у вас есть magento в режиме разработчика, вы не должны запускать команду статического развертывания» <- Это было очень полезно для меня. Спасибо! Я просто удалил содержимое каталога pub / static (за исключением, конечно, .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. Перекомпилируйте статическую папку pub: php bin/magento setup:static-content:deploy

  4. Очистить кеш это включено: php bin/magento cache:clean

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


1
было бы неплохо, если бы magento2 делал символические ссылки на эти затронутые файлы в режиме разработчика, а затем вносил изменения в эти файлы модулей, где они были видны на лету
roman204

Это так, но я так и не понял, когда и как, но я не сказал об этом в ответе. Существуют глобальные файлы конфигурации, которые могут установить это в вашем файле di.xml ( app/etc/di.xml). Но у меня были смешанные результаты во время тестирования. Во
circleix

5

Удалите папку, содержащую вашу тему, в pub / static /
очистите кэш внешнего интерфейса.
Вы можете использовать grunt для просмотра таблиц стилей. Читать здесь


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

5
  1. Удалить паб статический.
  2. Дать pub/static777 разрешение
  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, если 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.