Селекторные символы в пути css для grunt-contrib-compass

Я пытаюсь использовать grunt-contrib-compass для проекта AngularJS с несколькими папками приложений. Вот моя основная структура каталогов:

/root
   /appA
   /appB

   ...

   /appX
     /public
         /modules
             /moduleName
                 /css
                 /sass

gruntfile.js хранится в /root

Моя задача по компасу настроена следующим образом:

compass: {
    dev: {
        options: {
            cssDir: 'app*/public/modules/**/css',
            sassDir: 'app*/public/modules/**/sass',
            outputStyle: 'compressed'
        } 
    }
}

Обратите внимание на селекторы подстановочных знаков (*) в "cssDir" и "sassDir".

Когда эта задача выполняется, она успешно находит файлы.scss в каталоге, указанном для "sass". Однако при создании файлов.css создается новая структура папок в /root, например:

/root
   /app*
       /public
           /modules
               /**
                 /css

Папка "css" остается пустой, а фактический файл.css сохраняется в том же каталоге, что и мои файлы.scss.

Например, это вывод терминала для одного из файлов.scss при запуске задачи компаса:

>> File "appStudentHousing/public/modules/studentHousingHome/sass/styles.scss" changed.
Running "compass:dev" (compass) task
directory appStudentHousing/public/modules/studentHousingHome/sass
write appStudentHousing/public/modules/studentHousingHome/sass/styles.css (0.003s)

Похоже, что задача распознает групповые селекторы в опции "sassDir", но не распознает их в опции "cssDir". Он создает пустую структуру папок со звездочками в фактическом имени папки, а затем по какой-то причине сохраняет выходной файл.css в той же папке, что и файл.scss.

Большое спасибо за любую информацию, которую вы можете предоставить.

1 ответ

Решение

Мои комментарии преобразованы в ответ:

В настоящее время compassgrunt Плагин может обрабатывать только одиночные каталоги на одну цель, поэтому нет глобализации, которая бы соответствовала нескольким каталогам.

Чтобы обойти это ограничение, у вас всегда есть возможность создать несколько targets внутри вашего compass задача (Grunt функциональность). target является подразделением task и может использоваться для настройки различных сценариев выполнения.

Два разных targets для compass Плагин может выглядеть примерно так:

compass: {
    dev: {
        options: {
            cssDir: 'app/dev/modules/css',
            sassDir: 'app/dev/modules/sass',
            outputStyle: 'compressed'
        } 
    },
    live: {
        options: {
            cssDir: 'app/live/modules/css',
            sassDir: 'app/live/modules/sass',
            outputStyle: 'compressed'
        } 
    }
}

Это даст вам два targets, dev а также live, которые указывают разные варианты. Выполнить каждый target в отдельности вы просто вызываете их в командной строке следующим образом:

$ grunt compass:dev
$ grunt compass:live

Наименование target полностью зависит от вас, нет никаких строгих соглашений, которым нужно следовать. Если у вас есть один target для тебя task затем запустим задачу так:

$ grunt compass

Исполняет сингл target, Вам не нужно явно указывать это. Однако, если у вас есть несколько targets в вашем task, затем Grunt должен выполнить их все по порядку при работе с вышеуказанной командой.

И, как вы сами видели, чиновник Grunt документация дает вам более подробную информацию о tasks а также targets,

Другие вопросы по тегам