Программный запуск задачи Compass Grunt

У меня есть задача компаса, работающая на grunt, которая создает скомпилированный файл base.css, а также ряд файлов css для конкретных страниц. base.scss @импортирует партиал _settings.scss, который диктует некоторую глобальную настройку для всех файлов.

compass: {
    theme: {
        options: {
            sassDir: '/sass',
            cssDir: 'css',
            fontsPath: 'css/fonts',
            imagesPath: 'img'

        }
    }
}

Я хочу иметь возможность вызывать задачу компаса несколько раз, но каждый раз каким-то образом оговаривать, что в base.scss импортируется другой файл настроек, а для вывода используется другой cssDir. Это достижимо?

Я попытался использовать описанный ниже подход, включающий, по сути, добавление к компасам config.rb (через необработанные данные) в двух разных задачах компаса. Каждая задача включает отдельный путь импорта в каталог, содержащий файл настроек. Затем этот файл настроек выбирается как @import settings.scss вверху файла base.scss.

compass: {
    theme: {
        options: {
            httpPath: '/',
            sassDir: '/sass',
            cssDir: 'css',
            raw: 'add_import_path  "/sass/theme"'

        }
    },
    theme2: {
        options: {
            httpPath: '/',
            sassDir: '/sass',
            cssDir: 'css',
            raw: 'add_import_path  "/sass/theme2"'

        }
    }
}

Кажется, это работает, и хотя это похоже на взлом, это самое близкое к рабочему решению, которое у меня есть. Кажется, должен быть способ сделать это, но до сих пор решение упомянуло меня.

Теперь мне интересно, могу ли я использовать registerTask() для создания функциональности, которая мне нужна, в подходе, подобном тому, который я нашел здесь:

Программно передать аргументы задаче grunt?


person Mike Rifgin    schedule 02.05.2014    source источник
comment
Я искал и искал достойное решение для этого, но не похоже, что в настоящее время это возможно с помощью grunt. Один подход, который я рассмотрел, состоит в том, чтобы частичные настройки находились в двух отдельных каталогах, а затем, когда происходит изменение любого файла sass, копировать все мои основные модули и файлы подкачки в каждый из этих каталогов, а затем, наконец, запустить задачу компаса для обоих наборов файлов. ... кажется, что это долгий путь, и весь процесс займет намного больше времени. Возможно, единственный способ обойти это — ускорить изучение узла и создать собственный плагин для ворчания, чтобы решить эту проблему.   -  person Mike Rifgin    schedule 21.05.2014


Ответы (1)


Ваша текущая конфигурация

Я предполагаю, что основной недостаток того, как вы сейчас работаете, заключается в том, что изменение пути импорта не работает для обмена данными между темами. Предложением для этого было бы иметь два отдельных файла, не являющихся частичными.

shared/
  _partial1.scss
  _partial2.scss
  _partial3.scss
  _partial4.scss
  _partial5.scss
  _base.scss
theme1.scss
theme2.scss

Переменные, которые инициализируют каждую тему, находятся в каждой теме#.scss. Затем, если вам нужно развернуть это в разных папках под тем же именем, например «base.css», вы можете использовать другой плагин grunt, например https://github.com/gruntjs/grunt-contrib-copy, чтобы скопировать каждый файл theme#.css в папку theme# под именем base.css.

В файле theme1.scss содержимое может быть:

$variable1: '';
$variable2: '';
$variable3: '';

@import 'base',
        'partial1',
        'partial2',
        'partial3',
        'partial4',
        'partial5';
person fernandopasik    schedule 09.05.2014
comment
Извините, не следил за этим. Что именно означают переменные, импортированные или встроенные в каждый файл темы? Является ли файл темы теми частями, которые вы указали в общем каталоге? - person Mike Rifgin; 11.05.2014
comment
Переменные, которые инициализируют каждую тему, находятся в каждой теме # .scss, я отредактировал ответ. - person fernandopasik; 11.05.2014
comment
Спасибо за ответ кстати. Итак, я использую копию, чтобы скопировать тему # .css в каталог и переименовать его в base.css? Вот как ответ читается для меня. Я не уверен, что это сработает для меня. Мне нужно, чтобы тематические вары были доступны для базового частичного. Это дало мне идею, хотя... возможно, я могу скопировать базовую часть в два разных каталога, в которых есть разные файлы темы... затем оттуда я могу запустить свою задачу компаса... это сработает? - person Mike Rifgin; 12.05.2014
comment
Переменные могут быть в файле темы перед импортом базы и общих файлов. Проверьте мое редактирование. - person fernandopasik; 12.05.2014
comment
Ах хорошо. Я вижу сейчас. Это будет хорошо работать для моего base.css, но не будет работать для файлов, специфичных для страницы. Итак, скажем, у меня есть home.scss, который компилируется в home.css, но также нуждается в доступе к темам vars. Как я могу удовлетворить это, используя этот подход? Я не уверен, что это позволит. - person Mike Rifgin; 12.05.2014