Django-compressor: rassembler, concaténer et *puis* passer aux filtres ?

Créé le 15 avr. 2011  ·  6Commentaires  ·  Source: django-compressor/django-compressor

Salut! Existe-t-il de toute façon de collecter et de concaténer le CSS ou le JS dans un bloc particulier et de le passer ensuite à travers une chaîne de filtrage ? En particulier, j'aimerais utiliser pyScss pour traiter mon SCSS. J'ai créé un pySCSSFilter étendant FilterBase , et j'aimerais vraiment faire quelque chose comme :

{% 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 %}

mais bien sûr, cela ne fonctionnera pas car mes fichiers sont traités indépendamment les uns des autres.

Y a-t-il un moyen?

À votre santé!

feature

Commentaire le plus utile

C'est très important lorsque l'on utilise moins de préprocesseurs css, sa fonctionnalité « de base » permet d'utiliser des mixins. Par conséquent, la concaténation des fichiers avant le traitement via le filtre est une fonctionnalité indispensable. Y at - il un projet de fusion @jannon demandes ne dev branche django_compressor?

Tous les 6 commentaires

Hmm c'est exactement ce que je ne voudrais pas.

Que se passe-t-il s'ils ne se trouvent pas dans le même chemin de base et ont les mêmes instructions @import mais référençant des fichiers différents car ils se trouvent dans des chemins différents.

À l'heure actuelle, @import ne fonctionne même pas car le contenu du fichier est écrit dans un fichier temporaire avant d'être transmis au processeur.

Je dis traiter les fichiers un par un, puis concaténer afin que toutes les références pour la compilation soient correctes.

Je vais seconder un vote pour un moyen de concaténer les fichiers avant la pré-compilation. Cela serait très utile lors de l'utilisation de moins, etc., car une solution consiste à conserver les mixins et les variables globales dans un seul fichier et à les fusionner avant la compilation. À l'heure actuelle, vous devez répéter ces vars et mixins dans chaque fichier css, c'est-à-dire si vous avez un ensemble de vars globales de couleur de peau qui est utilisé dans plusieurs fichiers css, ce qui ruine en quelque sorte l'objectif d'utiliser des vars globales dans des frameworks css comme sass ou moins , à moins que vous ne conserviez tout dans un seul fichier.

Je comprends le problème mentionné par hvdklauw, alors peut-être que cela pourrait être une option sur chaque bloc de compression, à fusionner ou non avant la pré-compilation ou après?

@gensmann Ajouter une option au bloc de compression ressemble à un plan, oui.

C'est très important lorsque l'on utilise moins de préprocesseurs css, sa fonctionnalité « de base » permet d'utiliser des mixins. Par conséquent, la concaténation des fichiers avant le traitement via le filtre est une fonctionnalité indispensable. Y at - il un projet de fusion @jannon demandes ne dev branche django_compressor?

en ce qui concerne Sass, mon approche consiste à définir tous les chemins d'inclusion pour le binaire sass puis @import les autres fichiers dans mes fichiers 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 J'ai commencé à faire cela, mais les modifications apportées aux fichiers @import 'ed ne sont pas surveillées, et le serveur doit donc être redémarré pour chaque modification CSS.
Un peu étonné que cette fonctionnalité n'ait pas encore été implémentée. webassets a résolu ce problème, permettant aux utilisateurs d'utiliser SASS_AS_OUTPUT = True , qui concatène éventuellement les fichiers en premier.

Cette page vous a été utile?
0 / 5 - 0 notes