Django-compressor: reunir, concatenar y * luego * pasar a los filtros?

Creado en 15 abr. 2011  ·  6Comentarios  ·  Fuente: django-compressor/django-compressor

¡Hola! ¿Hay alguna forma de recopilar y concatenar el CSS o JS en un bloque en particular y _entonces_ pasarlo a través de una cadena de filtros? En particular, me gustaría usar pyScss para procesar mi SCSS. He creado un pySCSSFilter extendiendo FilterBase , y realmente me gustaría hacer 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 %}

pero, por supuesto, no funcionará, ya que mis archivos se procesan de forma aislada.

¿Hay alguna manera?

¡Salud!

feature

Comentario más útil

Es muy importante cuando se usan preprocesadores CSS, por lo tanto, su característica principal es permitir el uso de mixins. Por lo tanto, la concatenación de archivos antes de procesarlos a través del filtro es una funcionalidad imprescindible. ¿Hay algún plan para fusionar las solicitudes de @jannon en la rama dev django_compressor?

Todos 6 comentarios

Hmm, eso es exactamente lo que no querría.

¿Qué sucede si no están en la misma ruta base y tienen las mismas declaraciones @import pero hacen referencia a diferentes archivos porque están en diferentes rutas?

En este momento, @import ni siquiera funciona porque el contenido del archivo se escribe en un archivo temporal antes de pasarlo al procesador.

Digo procesar los archivos uno por uno y luego concatenarlos para que todas las referencias para la compilación sean correctas.

Apoyaré un voto para una forma de concatenar los archivos antes de precompilarlos. Esto sería muy útil cuando se usa menos, etc., ya que un método alternativo es mantener mixins y variables globales en un archivo y fusionarlo antes de compilar. En este momento, debe repetir esas vars y mixins en cada archivo css, es decir, si tiene un conjunto de vars globales de color de piel que se utilizan en varios archivos css, lo que arruina el propósito de usar vars globales en marcos css como sass o menos , a menos que guarde todo en un archivo.

Entiendo el problema que menciona hvdklauw, por lo que tal vez podría ser una opción en cada bloque de compresión, ya sea que se fusionen o no antes de la compilación previa o después.

@gensmann Agregar una opción al bloque compress suena como un plan, sí.

Es muy importante cuando se usan preprocesadores CSS, por lo tanto, su característica principal es permitir el uso de mixins. Por lo tanto, la concatenación de archivos antes de procesarlos a través del filtro es una funcionalidad imprescindible. ¿Hay algún plan para fusionar las solicitudes de @jannon en la rama dev django_compressor?

con respecto a Sass, mi enfoque para esto es definir todas las rutas de inclusión para el binario sass y luego @import los otros archivos en mis archivos 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 Comencé a hacer esto, pero los cambios en los archivos @import 'ed no se ven, por lo que el servidor debe reiniciarse para cada cambio de CSS en ellos.
Me sorprende un poco que esta función aún no se haya implementado. webassets resolvió esto, permitiendo a los usuarios usar SASS_AS_OUTPUT = True , que opcionalmente concatena los archivos primero.

¿Fue útil esta página
0 / 5 - 0 calificaciones