Css 当源文件夹有子文件夹时设置Compass目标文件夹

Css 当源文件夹有子文件夹时设置Compass目标文件夹,css,sass,gruntjs,grunt-contrib-compass,Css,Sass,Gruntjs,Grunt Contrib Compass,我正在通过grunt使用Compass编译SASS文件。我的目录结构如下所示: project/ Gruntfile.js package.json sass/ part1/ part1.sass css/ 还有我的Grunfile.js: grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), compass: { std:

我正在通过grunt使用Compass编译SASS文件。我的目录结构如下所示:

project/
    Gruntfile.js
    package.json
    sass/
        part1/
            part1.sass
    css/
还有我的Grunfile.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'
            }
        }
    }
});
当我运行GrunFile时,Compass输出到
project/css/part1/part1.css
,但我希望它输出到
project/css/part1.css
。我该怎么做?现在我正在使用一个on_样式表保存的钩子来移动文件,但它不是很优雅


希望问题清楚,并提前感谢。

我重新创建了您的环境。我可以进一步简化
grunfile.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');

};
您得到的是预期的指南针行为

通过阅读《自述》,我发现:

Compass在文件夹级别运行。因此,您不指定任何src/dest,而是定义
sassDir
cssDir
选项

这意味着您不能更改
CSS
编译到的路径,只能确定所有编译文件写入的根文件夹的路径

虽然这可能会让人恼火,
compass
只是简单地假设,让编译符合目录结构应该是您更愿意做的事情——这有点自以为是

你仍然可以做你想做的事,方法是:

  • 重新构造文件,使它们位于
    compass
    希望它们符合您意图的位置。即删除
    part1
    目录并将
    part1.sass
    放在
    sass
    文件夹下
  • CSS
    文件编译到一个临时文件夹(如
    tmp
    ),使用另一个任务(如
    copy
    )将所有
    CSS
    文件复制到
    CSS
    文件夹,然后使用任务(如
    clean
    )清空
    tmp
    文件。您将按该顺序加载任务,以便它们按正确的顺序运行

  • 如果没有
    Gruntfile.js
    ,我们真的不知道是什么导致了错误,但是这样的行为只能由错误的配置引起。把它贴在这里,我来看看。:)(顺便说一句,-1不是我的).@WallaceSidhrée我对问题进行了编辑,使其更加清晰,并包含了一个具体的最低限度的示例。如果您能提供任何帮助,我们将不胜感激!只是让问题的标题与您试图解决的问题更相关;)