【发布时间】:2012-03-06 00:12:50
【问题描述】:
您是否在多个目录中成功编译过 SASS?你能设置罗盘来递归地观察一个目录吗?
我已阅读有关 add_import_path 的文档,但我非常感谢一些示例代码,因为我(我相当确定)从未编写过一行 ruby 代码。
我问的原因是我有几个共享一些标准 scss 的项目。我希望更改共享 scss 以级联到所有项目。
谢谢。
【问题讨论】:
标签: compass-sass sass
您是否在多个目录中成功编译过 SASS?你能设置罗盘来递归地观察一个目录吗?
我已阅读有关 add_import_path 的文档,但我非常感谢一些示例代码,因为我(我相当确定)从未编写过一行 ruby 代码。
我问的原因是我有几个共享一些标准 scss 的项目。我希望更改共享 scss 以级联到所有项目。
谢谢。
【问题讨论】:
标签: compass-sass sass
假设您有以下目录结构:
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";
【讨论】:
这是我的解决方案,它支持基于两个 Ruby 脚本的多个独立 SASS 项目的批量罗盘编译/监视。
包含 Ruby 文件的文件夹结构:
Root
--compile.rb
--watch.rb
--Module1
----config.rb
----css
----sass
--Module2
----config.rb
----css
----sass
--Module3
----config.rb
----css
----sass
运行 compile.rb 和 watch.rb 并使用几个参数表示包含 config.rb 文件的模块文件夹的路径。
即:ruby compile.rb Module1/ Module2/ Module3/
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/
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。
http_path = "/"
css_dir = "css"
sass_dir = "sass"
【讨论】: