Magento2: Ponownie wygeneruj plik css w folderze pub / static


51

Zainstalowałem Magento 2 i ustawiłem tryb programisty, a następnie zainstalowałem jeden moduł zawierający pliki css i js. Moduł działa dobrze, a pliki css i js są renderowane z folderu pub / static. Teraz dokonałem zmian css w pliku css katalogu modułu i uruchom polecenie

php bin/magento setup:static-content:deploy

ale Magento nie wprowadza nowych zmian w plikach css pub / static, więc otrzymuję starą zawartość pliku css. Czy ktoś wie, jak zregenerować cały plik css w folderze pub / static?


8
FYI: Magento 2 ma tryb programisty, więc nie musisz cały czas wdrażać zawartości statycznej. W ciągu ostatniego miesiąca zmarnowałem wiele godzin, wdrażając zawartość statyczną. Więc nie bądź taki jak ja i przełącz się w tryb programisty (na komputerze lokalnym. Twój serwer na żywo powinien być w trybie produkcyjnym)
Nathan Merrill,

po co regenerować w innej wersji ??? Mam problem z niezgodnością wersji pliku wdrażania. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

3
Jeśli magento jest w trybie programisty, utworzy dowiązania symboliczne do plików statycznych, ale aby tak się stało, musisz mieć .htaccessplik w pub/staticfolderze, aby wiedział, jak dowiązać pliki, jeśli usunąłeś folder pub / static, którego .htaccessteraz brakuje
Vlad Patru

@NathanMerrill masz rację, ale większość deweloperów nie czyta dokumentacji i wszystkich odpowiedzi i nadal uruchamia komendę static-content: deploy. Co jest trochę smutne, że niektóre firmy z kontem na Stackexchange udzielają takich odpowiedzi , strata czasu
Vlad Patru,

Odpowiedzi:


69

Przed usunięciem pub / static wykonaj kopię zapasową pub / static / .htaccess i przywróć ją ponownie. w przeciwnym razie wszystkie css i js pokażą błąd 404!

  1. Usuń pub/static[Zachowaj kopię zapasową pliku .htaccess i skopiuj go ponownie]
    1. Usunąć var/cache
    2. Usunąć var/composer_home
    3. Usunąć var/generation
    4. Usunąć var/page_cache
    5. Usunąć var/view_preprocessed
    6. biegać php bin/magento setup:static-content:deploy

48
M2 nie czyni rzeczy bardzo przyjaznymi dla programistów.
Matthew McLennan

10
@CarComp nie należy nigdy ręcznie usuwać plików. magento powinno się tym zająć. to bardzo denerwujące
Claudiu Creanga

10
U musi być nowy w magento;)
CarComp

6
Myślę, że usuwając pub / static tracisz również plik .htaccess, który jest ważny, aby uniknąć błędów 404, można usunąć podfoldery pub / static, ale ten .htaccess powinien zostać zachowany
Elio Ermini

3
Jestem nowy w „magento”. WAT Czy to oficjalny sposób aktualizacji css?
puchu

20

odpowiedzi tutaj nie wspominają, że nie należy usuwać pliku .htaccess w folderze pub / static.

aby usunąć wszystkie pliki oprócz .htacces, wejdź do katalogu pub / static i uruchom

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

wtedy możesz biec

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

po co regenerować w innej wersji ??? Mam problem z niezgodnością wersji pliku wdrażania. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

1
nie działał zgodnie z oczekiwaniami
Christophe Ferreboeuf


9

Ponieważ pytanie dotyczy js and cssaktualizacji w Magento 2 w trybie programisty .

  1. Aktualizacja JS w twoim szanowanym module, przed odświeżeniem strony pub/static/frontend/namespace/theme/ ... module/js/...usuń ten sam plik , aby po odświeżeniu strony wygenerować nowy plik JS w folderze pub.
  2. Aktualizując CSS w swoim szanowanym module, wykonaj pkt 1.
  3. Aktualizacja mniejszego pliku

Ustaw motyw w Magento ...\dev\tools\grunt\configs\themes.js

Sklonuj dowolny motyw przykładowy luma do motywu i nadaj nazwę przypuszczając, że xyz

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

W folderze głównym zmień nazwę pliku: Gruntfile.js.sample na Gruntfile.js

W folderze głównym zmień nazwę pliku: package.json.sample na package.json

Musisz mieć chrząknięcie w folderze witryny, w przeciwnym razie zainstaluj za pośrednictwem npm

Otwórz wiersz polecenia z uprawnieniami administratora

Przejdź do folderu witryny w CMD i kliknij polecenie Hit grunt exec:themepo raz pierwszy po wdrożeniu motywu

Wtedy za grunt less:theme każdym razem, gdy wprowadzimy jakieś zmiany w mniejszym stopniu

Jeśli robisz często zmiany w mniejszym użyciu grunt watch, to automatycznie trafigrunt less:theme

Uwaga: może pojawić się błąd Symlink, więc przejdź do pliku .../app/etc/di.xmli skomentuj lub usuń kod (poniżej kodu) w tobie aż do zakończenia programowania, nie wypychaj skasowanego kodu tego pliku na serwer, jest on wymagany tylko lokalnie, jeśli to konieczne.

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

7

Prosty sposób 1

W Administratorze Magento. Idź do System > Tools > Cache Managementi kliknij Opróżnij pamięć podręczną plików statycznych .

Prosty sposób 2

Jeśli właśnie zmieniłeś plik css, który już istnieje , musisz po prostu usunąć odpowiedni plik pub/static, a następnie po odświeżeniu strony wygeneruje on nową wersję pliku css. Działa w trybie programisty .


Ogłoszenie

  1. Podczas tworzenia nowego pliku, zamiast modyfikowania istniejącego pliku, może być konieczne, aby wyczyścić pamięć podręczną php bin/magento cache:flush.

  2. Tryb domyślny i tryb programisty nie wymagają wdrażania plików widoku statycznego , ponieważ pliki statyczne są generowane dynamicznie, a nie materializowane. (Odniesienia: Informacje o trybach Magento )

  3. W trybie produkcyjnym możesz także potrzebować, php bin/magento setup:static-content:deploya php bin/magento cache:flushja nie próbuję jeszcze trybu produkcyjnego .


6

Ok, więc na podstawie tego, co przeczytałem w różnych innych postach i moim osobistym doświadczeniem jest proces regeneracji CSS lub dowolnej zawartości statycznej:

php bin/magento setup:upgrade

Spowoduje to wymazanie wszystkich niezbędnych plików pamięci podręcznej / generacji / etc bez usuwania wszystkiego, czego faktycznie potrzebujesz.

php bin/magento setup:di:compile

Spowoduje to ponowne skompilowanie plików. W końcu:

php bin/magento setup:static-content:deploy

Po ostatnim poleceniu wszystko powinno być nowe i świeże, wystarczy odświeżyć stronę.

----- Notatki ------

1) Zanim to zrobisz, upewnij się, że Twoje uprawnienia do plików i właściciel: grupa użytkowników są ustawione poprawnie, być może będziesz musiał porozmawiać o nich z administratorem systemu.

2) Jeśli polecenie setup: upgrade nie powiedzie się, może usunąć pliki i nie będzie możliwe zapisanie nowych, tak jak w moim przypadku z powodu uprawnień do plików. Może to uszkodzić twoją witrynę, po prostu usunąć uprawnienia, a następnie ponownie uruchomić polecenie.

3) Nie znalazłem (jak dotąd) sposobu ponownej kompilacji określonego motywu lub pliku (byłby bardzo pomocny, gdyby ktoś znalazł sposób) bez pisania całkowicie niestandardowego skryptu

Jeśli ktoś wie o czymś lepszym, daj mi znać, ponieważ 12 minut kompilacji plików, ponieważ musiałem wprowadzić pewne zmiany css, jest bardzo kiepskim projektem w moich oczach.

--- Edytować ---

Magento 2 ma w sobie Grunta, co sprawia, że ​​odświeżanie plików CSS / LESS jest nieskończenie łatwiejsze, jeśli poświęcisz trochę czasu na jego skonfigurowanie. Większość plików istnieje, ponieważ pliki .sample po prostu usuwają rozszerzenie .sample, skonfiguruj plik themes.js w folderze / dev / tools / grunt / configs. Następnie, gdy musisz odświeżyć swoje MNIEJ pliki, po prostu uruchom pomruk mniej: - motyw - z wiersza poleceń.

Zasób: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/css-topics/css_debug.html


Przestań udostępniać konfigurację php bin / magento: zawartość statyczna: metoda wdrażania, w trybie programisty magento ma dowiązania symboliczne
Vlad Patru

Aha i ręczne usuwanie folderów, usuwanie plików .htaccess i innych niepowiązanych, i zmuszanie go do przebudowy to lepsza metoda ??? Dodałem komentarz na temat korzystania z Grunta, ponieważ zwykłe przeniesienie sklepu do trybu programisty nie tworzy instancji wszystkich dowiązań symbolicznych i nie odświeża twojego css po przeładowaniu strony.
Vallier,

6

nie zapomnij uruchomić grunt exec:theme, grunt less:themepoleceń, gdzie themejest tematem masz zadeklarowane w themes.jspliku z folderu config chrząknięcia (to wszystko jest w podręczniku programisty) i kiedy masz Magento w trybie dewelopera nie należy uruchamiać polecenia statycznego wdrożyć, Magento2pracuje zSymlinks


1
„kiedy masz Magento w trybie programisty, nie powinieneś uruchamiać komendy statycznego wdrażania” <- To było dla mnie bardzo pomocne. Dzięki! Właśnie usunąłem zawartość katalogu pub / static (z wyjątkiem oczywiście .htaccess), odświeżyłem stronę i symbole dla moich plików css zostały automatycznie wygenerowane. Teraz mogę je edytować w locie. Kto powiedział, że Magento 2 nie jest przyjazny dla programistów ?! Po prostu muszę wiedzieć, jak go używać.
Rooster242,

1
Cześć, dziękuję kolego, chrząknij mniej: domyślne rozwiązało problem
Yusuf Ibrahim

6

Uruchom następujące polecenia w folderze głównym 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/

Nigdy nie myślałem o uruchomieniu reindeksu w tle Serge
Siergiej Filippow

Czy to ja, czy te polecenia Magento 1 są odpowiedzią na pytanie Magento 2?
Barry

Brak poleceń Magento 1, pochodzą one z Magento 2
Rafael Corrêa Gomes

6

Jest jedna ważna uwaga na temat tego pytania, której większość odpowiedzi wyraźnie nie wskazuje. W twoim przypadku (z konfiguracją, której używasz) powodem, dla którego twoje zmiany CSS nie są zauważane podczas ponownego generowania CSS do pub/staticfolderu, jest to, że nie usuwasz zawartości var/view_preprocessedreżysera. Wewnątrz tego katalogu znajdują się buforowane wersje Twojego CSS, które są pobierane do pub/staticfolderu po uruchomieniu php bin/magento setup:static-content:deploypolecenia.

Dlatego podczas ponownej kompilacji Magento najpierw sprawdzi var/view_preprocessedfolder w pamięci podręcznej CSS. Jeśli ten folder jest pusty, przejrzy pliki motywów i ściągnie ten CSS do kompilacji.

Te ustawienia są konfigurowalne, więc istnieje wiele sposobów na dotarcie do miejsca docelowego, które zmienią ścieżkę, którą musisz wybrać. Ale w celu rozwiązania określonej konfiguracji:

  1. Usuń pliki z pub/staticfolderu:rm -rf pub/static/*

  2. Usuń pliki z var/view_preprocessedfolderu:rm -rf var/view_preprocessed/*

  3. Ponownie skompiluj folder statyczny publikacji: php bin/magento setup:static-content:deploy

  4. Wyczyść pamięć podręczną, jeśli jest włączona: php bin/magento cache:clean

  5. Odśwież przeglądarkę.


1
byłoby miło, gdyby magento2 tworzył dowiązania symboliczne do tych plików, których dotyczy problem, w trybie programisty, a następnie zmiany w plikach modułów, gdy są widoczne w locie
roman204

Tak, ale nie zastanawiałem się nad tym, kiedy i jak, nie powiedziałem o tym w odpowiedzi. Istnieją globalne pliki konfiguracyjne, które można ustawić w app/etc/di.xmlpliku di.xml ( ). Ale podczas testów miałem mieszane wyniki. Jest trochę bardziej tutaj w drugiej odpowiedzi: magento.stackexchange.com/questions/116605/...
circlesix


5
  1. Usuń elektrostat z pubu.
  2. Daj pub/static777 pozwolenie
  3. Wyczyść pamięć podręczną.
  4. Biegać: php bin/magento setup:static-content:deploy

Zobaczysz nowy css.

UWAGA:

Daj odpowiednie uprawnienia do folderu i pliku.

Mam nadzieję, że to Ci pomoże.


„Zobaczysz nowy css”. - Nie, ale dziękuję
Barry

4

Nie możesz po prostu opróżnić statycznej pamięci podręcznej w panelu administracyjnym, a następnie

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

1

Upewnij się, że używasz trybu programisty.

Następnie wykonaj następujący kod:

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

Odśwież stronę z interfejsem. Te kroki rozwiązały mój problem.


miło, naprawdę mi pomogło dzięki
Yoesoff

0

Możesz jednak dodać flagę -flub --forcedo polecenia setup.

Przykład:

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

0

Upuszczę tutaj moją kroplę mądrości.

Używam cache_fly.shskryptu bash, który zasadniczo:

#!/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"

UWAGA: Dodałem echo, aby pokazać mi, ile czasu w moim życiu zmarnowałem czekając na jego uruchomienie. Również ./magentojest skrypt do zrobienia php bin/magentolub zadzwoń samo wewnątrz pojemnika Döcker, jeśli jest stosowany doker można zrobić swoje lub punkt php bin/magento, ale jeśli czytasz to należy wiedzieć, co mówię, a jeśli nie, należy uruchomić z prośbą o pomoc.


0

Mała adaptacja do mojej skrzynki

#!/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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.