使用Ruby的Compass(不是shell)

我正在Ruby中构建一个脚本,我想用Compass编译一个SCSS文件。 我试图尽可能简单,并希望避免使用config.rb文件。 我只想通过直接Ruby设置一些设置,并告诉Compass将单个SCSS文件编译成CSS文件。

我知道这必须是可能的,但我还没有找到关于如何做到这一点的任何体面的文件。 任何帮助,将不胜感激。

你是对的,关于如何使用Ruby的Compass,还没有任何全面的文档。 这很不幸,但是不要让像文档这样的小细节阻止我们!

第一次尝试

当我想要做同样的事情时,我只是在Compass 源码周围探索并且能够整合这个小Ruby脚本。 乍一看似乎可以解决这个问题:

require 'compass' require 'sass/plugin' compiler = Compass::Compiler.new( # Compass working directory '.', # Input directory 'styles/scss', # Output directory 'styles/css', # Compass options { :style => :compressed } ) compiler.compile('test.scss', 'test.css') 

但显然Compass有一堆默认配置选项,在直接调用编译器构造函数时(SASS load_path为1)不会自动包含这些选项。 尝试导入Compass函数和mixins时,这可能会导致错误,例如:

错误:要导入的文件未找到或不可读:compass / css3

指南针<1.0.0(又名“旧路”)

以下是如何在覆盖这些默认值的情况下调用编译器:

 require 'compass' Compass.add_configuration( { :project_path => '.', :sass_path => 'styles/scss', :css_path => 'styles/css' }, 'custom' # A name for the configuration, can be anything you want ) Compass.compiler.compile('test.scss', 'test.css') 

但是,从Compass版本1.0.0开始, Compass.compiler已被弃用,转而使用Compass.sass_compiler ,导致……

指南针> = 1.0.0(又名“新方式”)

感谢@philipp查找如何使用新API ,我们可以再次更新此代码段以使用Compass.sass_compiler

 require 'compass' require 'compass/sass_compiler' Compass.add_configuration( { :project_path => '.', :sass_path => 'styles/scss', :css_path => 'styles/css' }, 'custom' # A name for the configuration, can be anything you want ) compiler = Compass.sass_compiler({ :only_sass_files => [ 'styles/scss/test.scss' ] }) compiler.compile! 

只需从命令行调用compile方法即可。 您可以在那里指定每个选项。 要查看所有选项,请运行compass help compile

下面是一个例子。 它将编译的css文件输出到test.scss文件所在的目录中。

 file_name = "absolute/path/to/test.scss" system "compass compile #{file_name} --sass-dir . --css-dir ." 

您可以根据需要指定和插入任意数量的选项。 还要检查这是否在ruby中运行命令:

在Ruby脚本中运行命令行命令