SASS/Compass能否将foo.scss编译为foo.min.css和foo.dbg.css?

11

我想编译一组.scss文件,并使用不同的文件名。

在开发过程中,我想将例如foo.scss编译为foo.dbg.css(未压缩并含有注释)。在生产环境中,我想要例如foo.min.css(已压缩)。

是否有办法告诉SASS/Compass要使用哪个目标扩展名?命令行开关?config.rb选项?

编写一个首先编译然后重命名文件的脚本似乎不是很好的选择,因为那样我就不能有效地使用compass watch

(嗯,我可以编译到两个不同的输出目录,然后编写一个复制文件的脚本。但那感觉有点笨拙。)

更新:我通过编写简化版的监视代码解决了这个问题。当有变化时,它会触发重新编译到两个不同的输出目录,然后重命名和移动文件到指定位置。


我对你的“解决方法”非常感兴趣!你能分享给我们吗? - yckart
1
嗨@tuomassalo,如果您有机会发布解决方法,我也很感兴趣。 - mtpultz
3个回答

6
我无法使Alireza Fattahi的答案正常工作,因为它会抛出错误,因此我找到了另一个对我有用的示例。 http://h3r2on.com/2013/05/17/rename-css-on-compile.html
require "fileutils"

on_stylesheet_saved do |file|
  if File.exists?(file)
    filename = File.basename(file, File.extname(file))
    File.rename(file, css_dir + "/" + filename + ".min" + File.extname(file))
  end
end

谢谢!我也遇到了Alireza的答案中提到的同样问题。 - mtpultz
如果它在文件夹中,则无法正常工作。例如,assets/scss/module1/module1.scss 应该是 assets/css/module1/module1.min.css,但变成了 assets/css/module1.min.css。 - vee

4
不行。我在邮件列表中问过与RTL样式表相关的同样问题。然而,你可以使用不同的'config.rb'文件运行compass编译。尝试compass compile -c debug.rb
更新:Compass仍然不能实现,但Gulp可以使用Sass和Compass监视并生成多个目标CSS文件。详见 https://github.com/Snugug/gulp-css-target/

我不知道是否可以在同一个项目上使用“compass watch”运行两个终端。但如果可以的话,那你就得到它了 ;) - Capi Etheriel
如果有人尝试并报告了更好的结果,我会很乐意更新这个答案。欢迎提供日志 :) - Capi Etheriel

2
您可以将此添加到配置中。
请参见https://github.com/sbspk/Prepros/issues/38
require 'fileutils'

on_stylesheet_saved do |file|

  if file.match('.min') == nil

    require 'compass'

    Compass.add_configuration(
        {
            :project_path => File.dirname(File.dirname(file)),
            :sass_dir => File.basename(File.dirname(file)),
            :css_path => File.basename(File.dirname(file)),
            :output_style => :compressed
        },
        'alwaysmin' # A name for the configuration, can be anything you want
    )
    Compass.compiler.compile(File.dirname(file) + "/" + File.basename(file, '.css') + '.scss', File.dirname(file) + "/" + File.basename(file, '.css') + ".min.css")

  end

end

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