1

我正在尝试将 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”中的通配符选择器 (*)。

当此任务运行时,它会在为“sass”指定的目录中成功找到 .scss 文件。但是,在创建 .css 文件时,它会在 /root 中创建一个新的文件夹结构,如下所示:

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

“css”文件夹留空,实际的 .css 文件保存在与我的 .scss 文件相同的目录中。

例如,这是运行 compass 任务时其中一个 .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 文件相同的文件夹中。

非常感谢您提供的任何见解。

4

1 回答 1

3

我的评论变成了答案:

目前,该compass grunt插件只能处理每个目标的单个目录,因此不会匹配多个目录。

为了规避这个限制,你总是可以targets在你的compass任务(Grunt功能)中创建多个。Atarget是 a 的细分,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,devlive, 指定不同的选项。要单独执行每个target,您只需在命令行上调用它们,如下所示:

$ grunt compass:dev
$ grunt compass:live

a 的命名target完全取决于您,没有严格的约定可遵循。如果您有一个单独targettask,那么像这样运行任务:

$ grunt compass

执行单个target. 您不需要明确指定它。但是,如果您的 中有多个targetstask则在使用上述命令运行时Grunt应按顺序执行所有这些。

而且,正如您所见,官方Grunt文档tasks为您提供了有关和的更多详细信息targets

于 2014-12-10T23:20:04.147 回答