Oi! Existe alguma maneira de coletar e concatenar o CSS ou JS em um bloco específico e _então_ passá-lo por uma cadeia de filtros? Em particular, gostaria de usar pyScss para processar meu SCSS. Eu criei um pySCSSFilter
estendendo FilterBase
e realmente gostaria de fazer algo como:
{% compress css %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/mixins.scss" />
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/base.scss" />
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/other.scss" />
{% endcompress %}
mas é claro que não funciona porque meus arquivos são processados isoladamente.
Há algum caminho?
Saúde!
Hmm, isso é exatamente o que eu não gostaria.
E se eles não estiverem no mesmo caminho base e tiverem as mesmas instruções @import , mas
No momento, o @import nem funciona porque o conteúdo do arquivo é gravado em um arquivo temporário antes de ser passado para o processador.
Eu digo para processar os arquivos um por um e depois concatenar para que todas as referências para compilação estejam corretas.
Apoiarei uma votação para uma maneira de concatenar os arquivos antes de pré-compilar. Isso seria muito útil ao usar menos etc., uma vez que uma alternativa é manter mixins e variáveis globais em um arquivo e mesclá-lo antes de compilar. Agora você tem que repetir esses vars e mixins em cada arquivo css, ou seja, se você tiver um conjunto de vars globais de cor de pele que é usado em vários arquivos css, o que meio que estraga o propósito de usar vars globais em estruturas css como sass ou menos , a menos que você mantenha tudo em um arquivo.
Eu entendo o problema que hvdklauw menciona, então talvez pudesse ser uma opção em cada bloco de compactação, mesclar ou não antes da pré-compilação ou depois?
@gensmann Adicionar uma opção ao bloco de compressão soa como um plano, sim.
É muito importante ao usar pré-processadores css menos, seu recurso 'principal' é permitir o uso de mixins. Portanto, concatenar arquivos antes do processamento por meio do filtro é uma funcionalidade obrigatória. Existe algum plano para mesclar as solicitações
com relação ao Sass, minha abordagem para isso é definir todos os caminhos de inclusão para o binário sass e, em seguida, @import
os outros arquivos em meus arquivos scss:
# app/settings/common.py
...
scss_args = " ".join(["--include-path %s/vendor/bourbon/app/assets/stylesheets/" % VENDOR_ROOT,
"--include-path %s/vendor/bootstrap-sass-official/vendor/assets/stylesheets/" % VENDOR_ROOT])
...
COMPRESS_PRECOMPILERS = (
('text/coffeescript', 'node_modules/.bin/coffee --compile --stdio'),
('text/x-scss', 'node_modules/.bin/node-sass %s {infile} {outfile}' % scss_args)
)
...
// app/common/static/css/screen.scss
<strong i="9">@import</strong> url("http://fonts.googleapis.com/css?family=Montserrat:400,700");
<strong i="10">@import</strong> "./vendor.scss";
<strong i="11">@import</strong> "./elements.scss";
<strong i="12">@import</strong> "./pages.scss";
body, html {
font-family: 'Montserrat';
}
// app/common/static/css/vendor.scss
<strong i="15">@import</strong> "_bourbon.scss";
<strong i="16">@import</strong> "bootstrap.scss";
<! -- app/common/templates/base.html -->
...
{% compress css %}
<link href="{% static 'css/screen.scss' %}" type='text/x-scss' media='screen, projector' rel='stylesheet'>
{% endcompress %}
...
@airtonix eu comecei a fazer isso, mas as alterações em quaisquer @import
'arquivos não são monitorados e, portanto, o servidor precisa ser reiniciado para cada alteração de css neles.
Estou espantado com o fato de que esse recurso ainda não foi implementado. webassets resolveu isso, permitindo aos usuários usar SASS_AS_OUTPUT = True
, que opcionalmente concatra os arquivos primeiro.
Comentários muito úteis
É muito importante ao usar pré-processadores css menos, seu recurso 'principal' é permitir o uso de mixins. Portanto, concatenar arquivos antes do processamento por meio do filtro é uma funcionalidade obrigatória. Existe algum plano para mesclar as solicitações