关于sass:使用Ruby的Compass(不是shell)

Using Compass from Ruby (not shell)

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

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


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

第一次尝试

当我想做同样的事情时,我只是拨动指南针的源代码,就可以把这个小红宝石脚本组合起来。乍一看,它似乎起了作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)时不会自动包含在内。当尝试导入指南针功能和混合输入时,这可能会导致错误,例如:

error: File to import not found or unreadable: compass/css3

指南针<1.0.0(也就是"老办法")。

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

1
2
3
4
5
6
7
8
9
10
11
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一起使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

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

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

您可以指定和插入任意多个选项。另外,在Ruby中运行命令时也要检查这一点:

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