Компас Источник в нескольких каталогах

Успешно ли вы собрали SASS в нескольких каталогах? Можете ли вы настроить компас для рекурсивного просмотра каталога?

Я прочитал документацию по add_import_path, но я был бы очень признателен за некоторый пример кода, так как я (я вполне уверен) никогда не писал строки кода ruby.

Причина, по которой я спрашиваю, состоит в том, что у меня есть несколько проектов, которые используют некоторые стандартные scss Я бы хотел, чтобы изменения в общем scss касались всех проектов.

Благодарю.

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";

Вот мое решение, которое поддерживает пакетную компиляцию / просмотр нескольких независимых проектов SASS на основе двух сценариев Ruby.

Структура папок с файлами 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/

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"
Другие вопросы по тегам