以编程方式运行Compass Grunt任务

4
我有一个在Grunt上运行的指南针任务,它生成了一个已编译的base.css文件和一些特定于页面的CSS文件。 base.scss @imports一个_settings.scss部分,该部分为所有文件指定了一些全局设置。
compass: {
    theme: {
        options: {
            sassDir: '/sass',
            cssDir: 'css',
            fontsPath: 'css/fonts',
            imagesPath: 'img'

        }
    }
}

我希望能够多次调用指南针任务,但每次都能规定不同的设置文件被导入到base.scss中,并使用不同的cssDir作为输出。这是可行的吗?
我尝试了下面的方法,基本上是通过在两个不同的指南针任务中添加到config.rb(通过raw)来实现的。每个任务都包括一个不同的导入路径,指向包含设置文件的目录。然后,在我的base.scss顶部,该设置文件被选为@import settings.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"'

        }
    }
}

这似乎有效,虽然感觉像是一个hack,但这是我找到的最接近可行解决方案。看起来应该有一种方法可以做到这一点,但目前我还没有找到解决方案。
现在我想知道是否可以使用registerTask()创建我需要的功能,类似于我在这里找到的方法:Programmatically pass arguments to grunt task?

我已经搜索了很久来解决这个问题,但似乎目前使用grunt是不可能的。 我考虑的一种方法是将设置partials分为两个单独的目录,然后当对任何sass文件进行更改时将所有核心模块和页面文件复制到这些目录中的每个目录,最后在这两组文件上运行compass任务...这似乎是比较麻烦的方式,会使整个过程变得更加耗时。也许唯一的解决办法是加快学习node的速度,并构建自己的grunt插件来解决这个问题。 - Mike Rifgin
1个回答

1
你当前的配置
我猜现在你工作的主要问题是,改变导入路径不能在主题之间共享资源。建议将两个非局部文件分开。
shared/
  _partial1.scss
  _partial2.scss
  _partial3.scss
  _partial4.scss
  _partial5.scss
  _base.scss
theme1.scss
theme2.scss

每个主题的初始化变量都在各自的theme#.scss文件中。 如果您需要将其部署到同名不同文件夹下,例如"base.css",您可以使用另一个grunt插件https://github.com/gruntjs/grunt-contrib-copy,将每个theme#.css复制到theme#文件夹下,并命名为base.css。
在theme1.scss中的内容可能是:
$variable1: '';
$variable2: '';
$variable3: '';

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

抱歉,我没听懂。"将变量导入或嵌入到每个“主题文件”中"的确切含义是什么? "主题文件"是您在共享目录中列出的部分文件吗? - Mike Rifgin
每个主题的初始变量都在对应的theme#.scss文件中,我已经编辑过答案。 - fernandopasik
顺便说一句,谢谢你的回答。所以我使用复制将theme#.css复制到一个目录中并将其重命名为base.css?这就是我的理解。但我不确定这对我是否有效。我需要主题变量可用于基础部分。这给了我一个想法...也许我可以将基础部分复制到两个具有不同主题文件的不同目录中...然后从那里运行我的compass任务...这样会有效吗? - Mike Rifgin
变量可以在主题文件中在导入基础和共享文件之前定义。请检查我的编辑。 - fernandopasik
啊,好的。我现在明白了。这对我的base.css很有效,但对于特定页面的文件就不行了。比如说我有一个home.scss,它编译成home.css,但也需要访问主题变量。使用这种方法,我该怎么做呢?我不确定这种方法是否允许这样做。 - Mike Rifgin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接