Настройка папки назначения Compass, если в исходной папке есть подпапки

Я использую Compass через grunt для компиляции файла SASS. Моя структура каталогов выглядит так:

project/
    Gruntfile.js
    package.json
    sass/
        part1/
            part1.sass
    css/

И мой Gruntfile.js:

grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    compass: {
        std: {
            options: {
                sassDir: 'sass',
                cssDir: 'css',
                specify: 'sass/part1/part1.sass',
                raw: 'disable_warnings = true\n'
            }
        }
    }
});

Когда я запускаю свой gruntfile, Compass выводит project/css/part1/part1.css, но я хочу, чтобы он выводил на project/css/part1.css вместо. Как я могу это сделать? Прямо сейчас я использую хук on_stylesheet_saved для перемещения файла, но это не очень элегантно.

Надеюсь, вопрос ясен, и заранее спасибо.

1 ответ

Решение

Я воссоздал вашу среду. Я мог бы упростить Gruntfile.js даже больше:

module.exports = function(grunt) {

    // Main project configuration
    grunt.initConfig({
        // Read NPM package information
        pkg: grunt.file.readJSON('package.json'),
        // Compass
        compass: {
            std: {
                options: {
                    cssDir: 'css',
                    sassDir: 'sass'
                }
            }
        }
    });

    // Load the grunt tasks
    grunt.loadNpmTasks('grunt-contrib-compass');

    // Compile production files
    grunt.registerTask('std', [
        'compass:std'
    ]);

    // Default task(s)
    grunt.registerTask('default', 'std');

};

То, что вы получаете, это ожидаемое поведение компаса.

Чтение немного через readme https://github.com/gruntjs/grunt-contrib-compass, я вижу:

Компас работает на уровне папок. Из-за этого вы не указываете никакой src / dest, а вместо этого определяете sassDir а также cssDir опции.

Это означает, что вы не можете изменить путь туда, где ваш CSS компилируется в, только определяет путь к корневой папке, в которую записываются все скомпилированные файлы.

Хотя это может раздражать, compass просто предполагает, что поддержание компиляции в соответствии со структурой каталогов должно быть чем-то, что вы бы предпочли сделать - что-то несколько упрямое.

Вы все еще можете делать, что хотите, путем:

  1. Перестройка ваших файлов так, чтобы они были там compass ожидать, что они будут соответствовать вашему намерению. А именно сбросив part1 каталог и размещение part1.sass под sass папка.
  2. Компилирование вашего CSS файлы во временную папку, как tmp, используя другую задачу, такую ​​как copy ( grunt-contrib-copy), чтобы скопировать все CSS файлы в css папку, а затем использовать задачу, как clean ( grunt-contrib-clean), чтобы очистить tmp файл. Вы должны загрузить задачи в таком порядке, чтобы они выполнялись в правильной последовательности.
Другие вопросы по тегам