Dividere il tema SCSS in più file

I temi e i componenti dei temi stanno diventando sempre più potenti e gli sviluppatori diventano sempre più ambiziosi. Per facilitare il lavoro degli sviluppatori, i temi possono ora suddividere il loro SCSS in più file.

Quando si crea un nuovo tema con la theme CLI, o si condivide un tema su github, è sufficiente creare una nuova cartella chiamata scss. Riempila con i tuoi file .scss, seguendo qualsiasi struttura di cartelle, e tutti i file saranno disponibili per l’importazione nelle sezioni SCSS comuni / desktop / mobile del tuo tema.

Ad esempio, se vuoi avere una variabile comune disponibile sia per lo SCSS mobile che per quello desktop, potresti fare qualcosa di simile:

scss/my-folder/variables.scss

$favourite-color = red;

desktop/desktop.scss

@import "my-folder/variables";
body {
  background-color: $favourite-color;
}

mobile/mobile.scss

@import "my-folder/variables";
body {
  color: $favourite-color;
}

Questa funzionalità è stata aggiunta in v2.3.0.beta8, quindi non utilizzare queste funzionalità per il momento se devi mantenere la retrocompatibilità con le versioni precedenti di Discourse. Puoi utilizzare il parametro minimum_discourse_version di about.json per assicurarti che il tuo componente non venga utilizzato su una versione precedente.


Questo documento è controllato tramite versione - suggerisci modifiche su github.

20 Mi Piace

This is amazing @david! Nice work!

I can’t wait to give this a whirl.

8 Mi Piace

This is a great! I can now remove my hack for getting around not being able to do this.

5 Mi Piace

@david questo è ottimo, ma purtroppo sembra non funzionare quando il tema è un componente. Non sono sicuro che si tratti di un bug noto.

Puoi vederlo accadere con questo tema molto semplice: GitHub - LeoMcA/discourse-multi-scss-component · GitHub

Quando convertito in un tema autonomo, il colore di sfondo diventa verde, ma quando viene utilizzato come componente all’interno di un altro tema, non modifica affatto il colore di sfondo.

5 Mi Piace

Grazie @LeoMcA, hai ragione: questo non funzionava nei componenti. Il problema dovrebbe essere risolto in

4 Mi Piace

Dovrebbe funzionare ancora? I miei file SCSS predefiniti (common/desktop/mobile) non funzionano quando aggiungo un @import.

O c’è una nuova raccomandazione per dividere i file?

Questo dovrebbe ancora funzionare. Puoi condividere l’esatto statement @import che stai utilizzando e la struttura dei file delle tue fogli di stile?

La configurazione del tema ha una struttura di file predefinita e ho aggiunto scss/test.scss. Poi ho inserito @import "test";.

Nella console (usando discourse_theme watch) ottengo:
✘ Errore in common scss: Errore: File da importare non trovato o non leggibile: test. sulla riga 1 di common.scss

Il tuo file test.scss contiene qualcosa?

Ho dichiarato solo una variabile (a proposito, c’è un errore di battitura nel primo blocco di codice sopra: è stata dichiarata con il segno uguale: $favourite-color = red;)

Ma l’ho appena risolto. Ho impostato la versione minima in about.json come v2.3.0.beta8 e quando la rimuovo, funziona perfettamente. Non l’avevo mai usato prima, quindi non sono sicuro di cosa non vada nella dichiarazione.

1 Mi Piace

Interessante! Se aggiungi di nuovo la versione minima, si rompe in modo coerente? Se è così, ti dispiacerebbe comprimere il tema rotto e condividerlo qui? (o inviarlo in messaggio privato)

1 Mi Piace

Come detto, non ho mai impostato una versione minima in precedenza. Quindi l’ho semplicemente copiata qui sopra come v2.3.0.beta8. Questo causa un errore, mentre 2.3.0.beta8 funziona perfettamente.

È possibile utilizzare file scss da un pacchetto node_modules? Ad esempio:

@import 'bootstrap/scss/bootstrap.scss';
@import '../node_modules/bootstrap/scss/bootstrap.scss';

In entrambi i casi non riesco a importare questo dalla cartella /scss.