【问题标题】:Using Compass from Ruby (not shell)在 Ruby 中使用 Compass(不是 shell)
【发布时间】:2012-10-19 05:58:52
【问题描述】:

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

我知道这必须是可能的,但我还没有找到任何合适的文档来说明如何做到这一点。任何帮助将不胜感激。

【问题讨论】:

    标签: ruby sass compass-sass


    【解决方案1】:

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

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

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

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

    Running command line commands within Ruby script

    【讨论】:

    • 谢谢。我想尽量避免分叉系统进程。
    【解决方案2】:

    您说得对,实际上并没有任何关于如何在 Ruby 中使用 Compass 的全面文档。这很不幸,但我们不要让文档等小细节阻止我们!

    第一次尝试

    当我想做同样的事情时,我只是在 Compass source 周围戳了一下,然后就可以把这个小 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 就是其中之一)。在尝试导入 Compass 函数和 mixin 时,这可能会导致错误,例如:

    错误:找不到或无法读取要导入的文件:compass/css3

    指南针

    以下是如何调用编译器而不覆盖这些默认值:

    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 找到how to use the new API,我们可以再次更新此sn-p 以使用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!
    

    【讨论】:

    • 太棒了!太棒了!与bundle exec 一起使用时,我遇到了一个小故障。我不断收到指南针无法加载任何混入的错误。我假设它是一个需要设置的环境变量。你会碰巧知道需要设置什么吗?
    • 我应该添加我得到的错误...error: File to import not found or unreadable: compass/css3.
    • 我开始了另一个问题。我认为这是一个不同的问题。但是,我现在认为它直接相关。 stackoverflow.com/questions/13160660/….
    • 是的,你是对的。显式构造函数中的选项哈希不会与默认的 Compass 选项合并,从而消除了 sass 加载路径配置。我已经更新了我的答案。
    • 这样编译时有没有办法从ruby中传入变量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多