Magento2: rigenerare il file css nella cartella pub / static


51

Ho installato Magento 2 e impostato la modalità sviluppatore, quindi ho installato un modulo che contiene file css e js. Il modulo funziona bene e i file css e js vengono riprodotti dalla cartella pub / static. Ora ho apportato modifiche ai css nel file css della directory del modulo ed eseguo il comando

php bin/magento setup:static-content:deploy

ma Magento non sta apportando le mie nuove modifiche ai file pub / statici css, quindi sto ottenendo il vecchio contenuto del file css. Qualcuno sa come rigenerare l'intero file CSS nella cartella pub / static?


8
Cordiali saluti: Magento 2 ha una modalità sviluppatore, quindi non è necessario distribuire contenuti statici in ogni momento. Ho perso ore e ore nell'ultimo mese ridistribuendo il contenuto statico. Quindi non essere come me e passa alla modalità sviluppatore (sul tuo computer locale. Il tuo server live dovrebbe essere in modalità di produzione)
Nathan Merrill

perché rigenerare con versioni diverse ??? Ho un problema con la versione del file deploy non corrispondente. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

3
Se magento è in modalità sviluppatore, creerà collegamenti simbolici ai file statici ma, per far ciò, devi avere un .htaccessfile nella pub/staticcartella in modo che sappia come creare i collegamenti simbolici, se hai eliminato la cartella pub / static che .htaccessmanca ora
Vlad Patru

@NathanMerrill hai ragione, ma la maggior parte degli sviluppatori non legge la documentazione e tutte le risposte ed esegue ancora il contenuto statico: comando deploy e ciò che è un po 'triste è che alcune delle aziende con account su Stackexchange forniscono risposte del genere , perdita di tempo
Vlad Patru,

Risposte:


69

Prima di eliminare pub / static eseguire un backup di pub / static / .htaccess e ripristinarlo di nuovo. altrimenti tutti i tuoi CSS e J mostreranno un errore 404!

  1. Rimuovi pub/static[Mantieni il backup di .htaccess e copia di nuovo]
    1. Rimuovere var/cache
    2. Rimuovere var/composer_home
    3. Rimuovere var/generation
    4. Rimuovere var/page_cache
    5. Rimuovere var/view_preprocessed
    6. correre php bin/magento setup:static-content:deploy

48
M2 non rende le cose molto amichevoli per gli sviluppatori.
Matthew McLennan,

10
@CarComp nessun file dovrebbe mai essere cancellato manualmente. Magento dovrebbe occuparsene. è molto fastidioso
Claudiu Creanga,

10
U deve essere nuovo a Magento;)
CarComp

6
Penso che rimuovendo pub / static si perda anche il file .htaccess all'interno che è importante per evitare errori 404, va bene eliminare le sottocartelle di pub / static ma che .htaccess dovrebbe essere preservato
Elio Ermini

3
Sono nuovo di "magento". WAT? È il modo ufficiale per aggiornare i CSS?
puchu

20

le risposte qui non menzionano che non dovresti eliminare .htaccess nella cartella pub / static.

per cancellare tutti i file tranne i .htacces entrare nella directory pub / static ed eseguire

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

allora puoi correre

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

perché rigenerare con versioni diverse ??? Ho un problema con la versione del file deploy non corrispondente. magento.stackexchange.com/questions/94502/…
Magento2 Devloper

1
non ha funzionato come previsto
Christophe Ferreboeuf,


9

Poiché la domanda è per l' js and cssaggiornamento in Magento 2 in modalità sviluppatore .

  1. Aggiornamento di JS nel modulo rispettato, prima di aggiornare la pagina lo stesso file da pub/static/frontend/namespace/theme/ ... module/js/...eliminarlo, quindi dopo l'aggiornamento della pagina il nuovo file JS verrà generato nella cartella pub.
  2. Aggiornando il CSS nel tuo rispettivo modulo, esegui il pt 1.
  3. Aggiornamento di meno file

Installa il tema in Magento ...\dev\tools\grunt\configs\themes.js

Clona qualsiasi tema luma di esempio sul tuo tema e assegna un nome supponiamo xyz

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

Nella cartella principale cambiare il nome del file: Gruntfile.js.sample in Gruntfile.js

Nella cartella principale cambiare il nome del file: package.json.sample in package.json

Devi avere grugnito nella cartella del tuo sito, altrimenti installa via npm

Apri il prompt dei comandi con l' autorizzazione dell'amministratore

Vai alla cartella del sito in CMD e premi il comando grunt exec:themeper la prima volta dopo aver distribuito il tema

Quindi grunt less:theme ogni volta che facciamo cambiamenti in meno

Se si stanno apportando modifiche frequenti con un uso minore grunt watch, si verificherà automaticamentegrunt less:theme

Nota: è possibile che venga visualizzato l' errore Symlink, quindi vai al file .../app/etc/di.xmle commenta o rimuovi il codice (sotto il codice) nel tuo locale fino allo sviluppo, non inviare il codice chnaged di questo file al server, è necessario solo in locale se necessario.

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

7

Modo semplice 1

Nell'Amministratore Magento. Vai a System > Tools > Cache Managemente fai clic su Svuota cache file statici .

Modo semplice 2

Se hai appena cambiato il file CSS già esistente , ciò che devi fare è semplicemente eliminare il file corrispondente pub/static, quindi quando aggiorni la pagina, genererà il nuovo file CSS versione. Funziona in modalità sviluppatore .


Avviso

  1. Quando si crea un nuovo file, anziché modificare un file esistente, potrebbe essere necessario svuotare la cache php bin/magento cache:flush.

  2. La modalità predefinita e la modalità sviluppatore non richiedono la distribuzione di file di visualizzazione statici , a causa della generazione dinamica dei file statici anziché della materializzazione. (Riferimento: informazioni sulle modalità Magento )

  3. In modalità produzione , potresti anche aver bisogno php bin/magento setup:static-content:deploye php bin/magento cache:flush, non provo ancora la modalità produzione .


6

Ok, quindi in base a ciò che ho letto in vari altri post e la mia esperienza personale qui è il processo per rigenerare il CSS o qualsiasi contenuto statico:

php bin/magento setup:upgrade

Questo cancellerà tutti i file di cache / generazione / etc necessari senza eliminare tutto ciò di cui hai effettivamente bisogno.

php bin/magento setup:di:compile

Questo quindi ricompilerà i file. Infine:

php bin/magento setup:static-content:deploy

Dopo l'ultimo comando, tutto dovrebbe essere nuovo e aggiornato, basta aggiornare la tua pagina.

----- Appunti ------

1) Assicurati di avere i permessi dei file e il proprietario: il gruppo di utenti è impostato correttamente prima di farlo, potresti doverne parlare con il tuo amministratore di sistema.

2) Se l'installazione: il comando upgrade non riesce, è possibile che i file vengano eliminati e non sia possibile scriverne di nuovi, come nel mio caso a causa delle autorizzazioni dei file. Questo può interrompere il tuo sito, semplicemente appianare le autorizzazioni, quindi rieseguire il comando.

3) Non ho trovato (finora) un modo per ricompilare solo un tema o un file specifico (sarebbe molto utile se qualcuno trova un modo) senza scrivere uno script completamente personalizzato

Se qualcuno sa qualcosa di meglio, fammelo sapere, perché 12 minuti di compilazione dei file perché ho dovuto apportare alcune modifiche ai CSS sono un design estremamente scadente ai miei occhi.

--- Modificare ---

Magento 2 ha Grunt collegato e questo rende l'aggiornamento dei file CSS / LESS infinitamente più semplice se si prende il tempo per configurarlo. La maggior parte dei file è lì, poiché i file .sample rimuovono l'estensione .sample, configurano il file themes.js nella cartella / dev / tools / grunt / configs. Quindi, quando è necessario aggiornare i file LESS, è sufficiente eseguire grunt less: - tema-- dalla riga di comando.

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


Smetti di fornire il php bin / magento setup: contenuto statico: metodo deploy, in modalità sviluppatore magento ha collegamenti simbolici
Vlad Patru

Oh e cancellare manualmente le cartelle, rimuovere i file .htaccess e altri non correlati e costringerlo a ricostruire è il metodo migliore ??? Ho aggiunto un commento sull'utilizzo di Grunt, perché semplicemente spostare il tuo negozio in modalità sviluppatore non crea un'istanza di tutti i link simbolici e aggiorna il tuo CSS alla pagina di ricarica.
Vallier,

6

non dimenticare di eseguire i comandi grunt exec:theme, grunt less:themedove si themetrova il tema che hai dichiarato nel themes.jsfile dalla cartella config di grunt (tutto questo è nella guida per gli sviluppatori) e quando hai magento in modalità sviluppatore non dovresti eseguire il comando deploy statico, Magento2lavora conSymlinks


1
"quando hai magento in modalità sviluppatore non dovresti eseguire il comando deploy statico" <- Questo mi è stato estremamente utile. Grazie! Ho appena cancellato il contenuto della directory pub / static (tranne ovviamente per .htaccess), ho aggiornato la pagina e sono stati generati automaticamente i symliks nei miei file CSS. Ora posso modificarli al volo. Chi ha detto che Magento 2 non è dev friendly ?! Devo solo sapere come usarlo credo.
Rooster242,

1
Ciao grazie amico, grugnito meno: il default ha risolto il problema
Yusuf Ibrahim

6

Esegui questi comandi nella cartella principale di 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/

Non ho mai pensato di organizzare un reindex in background 👍🏻
Sergei Filippov,

Sono io o sono questi comandi di Magento 1 in risposta a una domanda di Magento 2?
Barry,

Non ci sono comandi Magento 1, vengono da Magento 2
Rafael Corrêa Gomes il

6

C'è una nota importante da fare su questa domanda che la maggior parte delle risposte non specifica in modo specifico. Nel tuo caso (con la configurazione che stai utilizzando) il motivo per cui le modifiche ai CSS non vengono rilevate quando si rigenera il CSS nella pub/staticcartella è che non si rimuove il contenuto del var/view_preprocessedregista. All'interno di questa directory ci sono versioni memorizzate nella cache del CSS che vengono inserite nella pub/staticcartella quando si esegue il php bin/magento setup:static-content:deploycomando.

Quindi, quando ricompili, Magento cercherà prima nella var/view_preprocessedcartella il CSS memorizzato nella cache. Se questa cartella è vuota, cercherà i file del tema e tirerà quel CSS per la compilazione.

Queste impostazioni sono configurabili, quindi ci sono molti modi per arrivare a destinazione che cambieranno il percorso che devi prendere. Ma per la soluzione alla tua configurazione specifica:

  1. Rimuovi i file dalla pub/staticcartella:rm -rf pub/static/*

  2. Rimuovi i file dalla var/view_preprocessedcartella:rm -rf var/view_preprocessed/*

  3. Ricompila la cartella statica pub: php bin/magento setup:static-content:deploy

  4. Cancella cache è attivata: php bin/magento cache:clean

  5. Aggiorna il browser.


1
sarebbe bello se magento2 realizzasse collegamenti simbolici a quei file interessati in modalità sviluppatore, quindi cambi in quei file del modulo dove sono visibili al volo
roman204

Lo fa, ma non mi sono preoccupato del quando e del come, os non l'ho sollevato nella risposta. Esistono file di configurazione globali che possono essere impostati nel app/etc/di.xmlfile di.xml ( ). Ma ho avuto risultati contrastanti durante i test. C'è un po 'di più qui nella seconda risposta: magento.stackexchange.com/questions/116605/…
circlesix


5
  1. Rimuovi pub statico.
  2. Dai il pub/staticpermesso 777
  3. Cancella cache.
  4. Correre: php bin/magento setup:static-content:deploy

Vedrai nuovi css.

NOTA:

Fornire le autorizzazioni appropriate per cartelle e file.

Spero che questo ti possa aiutare.


"Vedrai nuovi css." - Non l'ho fatto, ma grazie
Barry, il

4

Non potresti semplicemente svuotare la cache statica nel pannello di amministrazione e quindi

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

1

Assicurati di utilizzare la modalità sviluppatore.

Quindi eseguire il seguente codice:

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

Aggiorna la pagina del frontend, questi passaggi hanno risolto il mio problema.


bello, mi aiuta davvero grazie
Yoesoff

0

Tuttavia, è possibile aggiungere il flag -fo --forceal comando di installazione.

Esempio:

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

0

Lascio cadere la mia gocciolina di saggezza qui.

Uso uno cache_fly.shscript bash che sostanzialmente fa:

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

NOTA: ho aggiunto un'eco per mostrarmi quante volte della mia vita ho perso tempo ad aspettare che scappasse. Inoltre ./magentoè uno script per fare php bin/magentoo chiamare la stessa cosa nel contenitore della finestra mobile, se viene utilizzata la finestra mobile si potrebbe creare la propria o indicare php bin/magentoma se stai leggendo questo dovresti sapere di cosa sto parlando, in caso contrario, esegui chiedendo per un aiuto.


0

Piccolo adattamento per il mio caso

#!/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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.