Gruntjs 以编程方式运行Compass Grunt任务

Gruntjs 以编程方式运行Compass Grunt任务,gruntjs,compass-sass,grunt-contrib-compass,Gruntjs,Compass Sass,Grunt Contrib Compass,我在grunt上运行了一个compass任务,它生成了一个编译的base.css文件和一些特定于页面的css文件。base.scss@导入一个\u settings.scss部分,该部分指示所有文件的一些全局设置 compass: { theme: { options: { sassDir: '/sass', cssDir: 'css', fontsPath: 'css/fonts',

我在grunt上运行了一个compass任务,它生成了一个编译的base.css文件和一些特定于页面的css文件。base.scss@导入一个\u settings.scss部分,该部分指示所有文件的一些全局设置

compass: {
    theme: {
        options: {
            sassDir: '/sass',
            cssDir: 'css',
            fontsPath: 'css/fonts',
            imagesPath: 'img'

        }
    }
}
我希望能够多次调用compass任务,但每次都规定在base.scss中导入不同的设置文件,并使用不同的cssDir作为输出。这是可以实现的吗

我尝试使用下面的方法,在两个不同的compass任务中添加compasses config.rb(通过raw)。每个任务都包括到包含设置文件的目录的不同导入路径。然后将此设置文件作为my base.scss顶部的导入设置.scss拾取

compass: {
    theme: {
        options: {
            httpPath: '/',
            sassDir: '/sass',
            cssDir: 'css',
            raw: 'add_import_path  "/sass/theme"'

        }
    },
    theme2: {
        options: {
            httpPath: '/',
            sassDir: '/sass',
            cssDir: 'css',
            raw: 'add_import_path  "/sass/theme2"'

        }
    }
}
这似乎是可行的,虽然感觉像是一个黑客,但这是我最接近于一个可行的解决方案。似乎应该有办法做到这一点,但到目前为止,解决方案暗示了我

我现在想知道是否可以使用registerTask()创建我在方法中需要的功能,比如我在这里找到的方法:


您当前的配置

我猜您现在工作方式的主要警告是,更改导入路径不适用于在主题之间共享内容。建议将两个非部分文件分开

shared/
  _partial1.scss
  _partial2.scss
  _partial3.scss
  _partial4.scss
  _partial5.scss
  _base.scss
theme1.scss
theme2.scss

初始化每个主题的变量位于每个主题#.scss中。 然后,如果您需要将它部署到相同名称下的不同文件夹中,如“base.css”,您可以使用另一个grunt插件,如,将每个主题#.css复制到名为base.css的主题文件夹中

在theme1.scss上,内容可以是:

$variable1: '';
$variable2: '';
$variable3: '';

@import 'base',
        'partial1',
        'partial2',
        'partial3',
        'partial4',
        'partial5';

对不起,我没听懂。“将变量导入或嵌入每个”主题文件是什么“确切地说是什么意思?主题文件是您在共享目录中列出的部分吗?每个主题中的变量都在每个主题中。scss,我编辑了答案谢谢您的回答。所以我使用copy将主题#.css复制到一个目录中,并将其重命名为base.css?这就是我的答案。我不确定这是否适合我。我需要的主题变量是可用的基础部分。这给了我和想法。也许我可以将基本部分复制到两个不同的目录中,这两个目录中都有不同的主题文件。然后从那里我可以运行我的compass任务…这样行吗?在导入基本文件和共享文件之前,变量可以在主题文件中。检查我的编辑。啊,好的。我现在明白了。这对my base.css很有效,但对特定于页面的文件不起作用。假设我有一个home.scss,它可以编译为home.css,但也需要访问主题变量。我如何使用这种方法来满足这种需求?我不确定这是否会允许。我已经搜索了一个不错的解决方案,但现在似乎不可能使用grunt。我考虑过的一种方法是将设置部分放在两个单独的目录中,然后当任何sass文件发生更改时,将我的所有核心模块和页面文件复制到每个目录中,然后最后在两组文件上运行compass任务……这似乎是一个漫长的过程,将使整个过程花费更长的时间。也许解决这个问题的唯一方法是加快学习节点的速度,并构建自己的grunt插件来处理这个问题。