多个目录中的指南针源

时间:2012-02-14 16:01:39

标签: compass-sass sass

您是否成功在多个目录中编译SASS?你能设置罗盘来递归观看目录吗?

我已经阅读了关于add_import_path的文档,但我非常感谢一些示例代码,因为我(我相当肯定)从未编写过一行ruby代码。

我问的原因是我有几个项目共享一些标准scss。我希望对共享scss进行更改以级联到所有项目。

感谢。

2 个答案:

答案 0 :(得分:2)

假设您有以下目录结构:

project
    |-- config.rb
    +-- apps
        |-- main.scss
        |-- app1
            +-- appst1.scss
        |-- app2
            +-- appst2.scss
        +-- app3
            +-- appst3.scss

然后调整config.rb

sass_dir = "apps"
add_import_path "apps"
...

并在你的main.scss中包含其他scss文件:

@import "app1/appst1";
@import "app2/appst2";
@import "app3/appst3";

答案 1 :(得分:2)

这是我的解决方案,支持批量罗盘编译/观看多个独立的SASS项目,基于两个Ruby脚本。

Ruby文件的文件夹结构:

Root
--compile.rb
--watch.rb
--Module1
----config.rb
----css
----sass
--Module2
----config.rb
----css
----sass
--Module3
----config.rb
----css
----sass

使用多个参数运行compile.rbwatch.rb,这些参数表示包含config.rb文件的模块文件夹的路径。

即。 :ruby compile.rb Module1/ Module2/ Module3/

compile.rb

require 'rubygems'
require 'compass'
require 'compass/exec'

ARGV.each do |arg|
  Compass::Exec::SubCommandUI.new(["compile", arg, "--force"]).run!
end

即。 :ruby watch.rb Module1/ Module2/ Module3/

watch.rb

require 'rubygems'
require 'compass'
require 'compass/exec'

threads = []
ARGV.each do |arg|
  threads << Thread.new {
    Compass::Exec::SubCommandUI.new(["watch", arg, "--force"]).run!
  }
  sleep(1)
end
threads.each { |thr| thr.join }

请注意,我们需要为每个罗盘手表创建一个单独的线程(因为它们是阻塞进程)。 sleep(1)是必要的,因为Compass::Exec::SubCommandUI实际上不是线程安全的,并且可能在同一模块上运行多个监视,而不是每个监视一个。如果发生这种情况,请尝试增加sleep值。

在所有模块中创建类似的config.rb文件。您可能必须使用compass init来获取指南针识别的第一个config.rb

config.rb

http_path = "/"
css_dir = "css"
sass_dir = "sass"