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

Isso ainda deveria funcionar? Meus arquivos SCSS padrão (common/desktop/mobile) não funcionam quando adiciono um @import.

Ou há uma nova recomendação para dividir os arquivos?

Isso ainda deve funcionar. Você pode compartilhar a declaração exata de @import que está usando e a estrutura de arquivos das suas folhas de estilo?

A configuração do tema possui uma estrutura de arquivos padrão e eu adicionei scss/test.scss. Em seguida, declarei @import "test";.

No console (usando discourse_theme watch), recebo:
✘ Erro no SCSS comum: Erro: Arquivo para importação não encontrado ou ilegível: test. na linha 1 de common.scss

O arquivo test.scss tem algum conteúdo?

Declarada apenas uma variável (a propósito, há um erro de digitação no primeiro bloco de código acima, declarada com sinal de igual: $favourite-color = red;)

Mas acabei de resolver. Defini a versão mínima em about.json como v2.3.0.beta8 e, ao removê-la, funciona perfeitamente. Nunca usei isso antes, então não sei o que está errado com a declaração.

1 curtida

Interessante! Se você adicionar a versão mínima novamente, o problema ocorre consistentemente? Se sim, você se importaria de compactar o tema com o erro e compartilhá-lo aqui? (ou enviar por mensagem privada para mim)

1 curtida

Como dito, eu nunca defini uma versão mínima antes. Então, eu apenas a copie acima como v2.3.0.beta8. Isso falha, mas 2.3.0.beta8 funciona perfeitamente.

É 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.