Dividir o tema SCSS em múltiplos arquivos

Os temas e componentes de tema estão se tornando cada vez mais poderosos, e os desenvolvedores estão ficando cada vez mais ambiciosos. Para facilitar as coisas para os desenvolvedores, os temas agora podem dividir seu SCSS em vários arquivos.

Ao criar um novo tema com o theme CLI, ou compartilhar um tema no github, simplesmente crie uma nova pasta chamada scss. Preencha-a com seus arquivos .scss, seguindo qualquer estrutura de pasta, e todos os arquivos estarão disponíveis para você importar nas seções SCSS comuns / desktop / mobile do seu tema.

Por exemplo, se você quiser ter uma variável comum disponível tanto para o SCSS móvel quanto para o de desktop, você pode fazer algo como isto:

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;
}

Este recurso foi adicionado no v2.3.0.beta8, então não use esses recursos ainda se precisar manter a compatibilidade com versões anteriores do Discourse. Você pode usar o parâmetro minimum_discourse_version do about.json para garantir que seu componente não seja usado em uma versão anterior.


Este documento tem controle de versão - sugira alterações no github.

20 curtidas

This is amazing @david! Nice work!

I can’t wait to give this a whirl.

8 curtidas

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

5 curtidas

@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 curtidas

Thanks @LeoMcA, you’re right - this wasn’t working in components. The issue should be fixed in

4 curtidas

Is that still supposed to work? My default scss files (common/desktop/mobile) don’t work when I add an @import.

Or is there a new recommendation for splitting files?

This should still work. Can you share the precise @import statement you’re using, and the file structure of your stylesheets?

The theme setup has default file structure and I added scss/test.scss Then I state @import "test";

On the console (using discourse_theme watch) I get:
✘ Error in common scss: Error: File to import not found or unreadable: test. on line 1 of common.scss

Does your test.scss file have any content?

Just declared one variable (btw there’s a typo on the first code block above, declared with equals: $favourite-color = red;)

But just solved it. I set the minimum version in about.json as v2.3.0.beta8 and when I remove that, it works just fine. Never used that before, so not sure what’s wrong with the declaration.

1 curtida

Interesting! If you add the minimum version again, does it consistently break? If so, would you mind zipping up the broken theme and sharing it here? (or PMing it to me)

1 curtida

As said, I never set a min version before. So I just copied it above as v2.3.0.beta8. This breaks, but 2.3.0.beta8 works just fine.

É possível usar arquivos scss de um pacote node_modules? Por exemplo:

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

Em ambos os casos, não consigo importar isso da pasta /scss.