Привет! Есть ли способ собрать и объединить CSS или JS в конкретном блоке и _ затем_ пропустить его через цепочку фильтров? В частности, я хотел бы использовать pyScss для обработки моего SCSS. Я создал pySCSSFilter
расширяющий FilterBase
, и мне очень хотелось бы сделать что-то вроде:
{% 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 %}
но, конечно, не будет работать, так как мои файлы обрабатываются изолированно друг от друга.
Есть способ?
Ваше здоровье!
Хм, это именно то, чего я бы не хотел.
Что делать, если они не находятся в одном базовом пути и имеют одинаковые операторы @import, но ссылаются на разные файлы, потому что они находятся в разных путях.
Прямо сейчас @import даже не работает, потому что содержимое файла записывается во временный файл перед передачей процессору.
Я говорю обрабатывать файлы один за другим, а затем объединять, чтобы все ссылки для компиляции были правильными.
Я проведу голосование за способ объединения файлов перед предварительной компиляцией. Это было бы очень полезно при использовании less и т. Д., Поскольку резервный вариант - хранить миксины и глобальные переменные в одном файле и объединять его перед компиляцией. Прямо сейчас вам нужно повторить эти переменные и миксины в каждом файле css, т.е. если у вас есть набор глобальных переменных цвета кожи, который используется в нескольких файлах css, что как бы разрушает цель использования глобальных переменных в структурах css, таких как sass или менее , если вы не храните все в одном файле.
Я понимаю проблему, о которой упоминает hvdklauw, поэтому, возможно, это может быть вариант для каждого блока сжатия, чтобы или не объединять до предварительной компиляции или после?
@gensmann Добавление опции к блоку сжатия звучит как план, ага.
Это очень важно при использовании препроцессоров CSS, таких как меньше, его «основная» функция позволяет использовать миксины. Поэтому объединение файлов перед обработкой с помощью фильтра является обязательной функцией. Есть ли какие - либо планы объединить @jannon запросы сделать Dev филиал django_compressor?
Что касается Sass, мой подход к этому состоит в том, чтобы определить все пути включения для двоичного файла sass, а затем @import
других файлов в моих файлах 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 Я начал это делать, но изменения в любых файлах @import
'ed не отслеживаются, и поэтому сервер необходимо перезапускать при каждом изменении css в них.
Кинда удивлен, что эта функция еще не реализована. webassets решили эту проблему, позволив пользователям использовать SASS_AS_OUTPUT = True
, который, возможно, сначала объединяет файлы.
Самый полезный комментарий
Это очень важно при использовании препроцессоров CSS, таких как меньше, его «основная» функция позволяет использовать миксины. Поэтому объединение файлов перед обработкой с помощью фильтра является обязательной функцией. Есть ли какие - либо планы объединить @jannon запросы сделать Dev филиал django_compressor?