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 this is great, but unfortunately it doesn’t seem to work when the theme is a component. Not sure if that’s a known bug.

You can see it happen with this very simple theme: GitHub - LeoMcA/discourse-multi-scss-component

When converted to a stand-alone theme the background colour will be green, but when used as a component within another theme it doesn’t change the background colour at all.

5 Mi Piace

Thanks @LeoMcA, you’re right - this wasn’t working in components. The issue should be fixed 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.