Не удается выполнить работу с помощью grunt-contrib-compass

Итак, у меня есть следующая ситуация. Когда я использую компас только из CLI, он просто работает и делает именно то, что требуется. Я запускаю compass compile из той же папки, где находится файл config.rb (в папке styles). Он также содержит каталоги sass и css. Здесь мой файл config.rb:

project_path = '.'
css_dir = "css"
sass_dir = "sass"
images_dir = "../../data/images"
javascripts_dir = "../scripts"

output_style = :compressed
environment = :development
relative_assets = true

Когда я пытаюсь использовать grunt для этого, я использую следующую конфигурацию в Gruntfile.js:

compass: {
    compile: {
        options: {
            basePath: 'app/src/styles',
            config: 'app/src/styles/config.rb'
        }
    }
}

Папка app и Gruntfile.js расположены на одном уровне. Когда я запускаю grunt compass, я вижу следующий вывод:

Running "compass:dist" (compass) task
Nothing to compile. If you're trying to start a new project, you have left off the directory argument.
Run "compass -h" to get help.

Done, without errors.

Если я попытаюсь указать все параметры прямо как:

compass: {
    compile: {
        options: {
            basePath: 'app/src/styles',
            sassDir: 'app/src/styles/sass',
            cssDir: 'app/src/styles/css',
            imagesDir: 'app/data/images'
        }
    }
}

Выполняет эту задачу, но папка .sass-cache создается на уровне Gruntfile.js. Поэтому я предполагаю, что существует некоторая проблема с параметром basePath конфигурации.

Я что-то делаю неправильно?


ИЗМЕНИТЬ:
Единственный способ, которым я смог заставить его работать, как и предполагалось, перемещает файл config.rb на уровень Gruntfile.js и задает в нем следующие параметры:

project_path = 'app/src/styles'
css_dir = "css"
sass_dir = "sass"
images_dir = "../../data/images"
javascripts_dir = "../scripts"

output_style = :compressed
environment = :development
relative_assets = true

Также я удалил все параметры из "Gruntfile.js", которые относятся к этой задаче. Все еще не уверен, что происходит здесь.

Ответ 1

Не пытайтесь установить basePath в конфигурации Grunt, т.е.

compass: {
   compile: {
     options: {
        basePath: 'app/src/styles',
        config: 'app/src/styles/config.rb'
    }
  }
}

Включить:

compass: {
       compile: {
         options: {
            config: 'app/src/styles/config.rb'
        }
      }
    }

А также запустите свой Grunt Compass с помощью переключателя -verbose (grunt compass --verbose), чтобы увидеть, какие файлы grunt пытается обработать.

Обратите внимание, что любой параметр, который вы добавляете к своим параметрам в файле Grunt, будет переопределять (или расширять) настройки в файле config.rb.

Просмотрите эту страницу: https://github.com/gruntjs/grunt-contrib-compass, чтобы узнать больше о grunt-contrib-compass. у них есть информация обо всех возможных вариантах.

Ответ 2

если вам нужен другой базовый путь для вашего проекта, чем ваш config.rb, вы можете установить Path в config.rb(даже относительный)

Пример config.rb

project_path    = "../src/main/webapp/"
http_path       = "./"
css_dir         = "css"
sass_dir        = "../library"
images_dir      = "assets/images"
fonts_dir       = "assets/fonts"
javascripts_dir = "assets/js"

...

relative_assets = true

Пример SCSS

.stylesheet-url {
  content:stylesheet-url("style.css");
}

.font-url {
  content:font-url("font.woff");
}

.image-url {
  content:image-url("image.png");
}

.generated-image-url {
  content:generated-image-url("image2.png");
}

Пример CSS

.stylesheet-url {
  content: url('style.css');
}

.font-url {
  content: url('../assets/fonts/font.woff');
}

.image-url {
  content: url('../assets/images/image.png');
}

.generated-image-url {
  content: url('../assets/images/image2.png');
}

Мы запускаем Compass 0.12.latest на Win7 x64