2012-10-29 9 views
8

Buduję skrypt w Ruby, gdzie chciałbym skompilować pojedynczy plik SCSS przy użyciu kompasu. Próbuję uczynić to tak prostym, jak to możliwe, i chciałbym uniknąć użycia pliku config.rb. Chcę tylko ustawić kilka ustawień za pomocą prostej Ruby i powiedzieć kompasowi, aby skompilował pojedynczy plik SCSS do pliku CSS.Używanie kompasu z Ruby (nie powłoki)

Wiem, że to musi być możliwe, ale nie byłem w stanie znaleźć żadnej przyzwoitej dokumentacji, jak to zrobić. Każda pomoc będzie doceniona.

Odpowiedz

9

Masz rację, nie ma tak naprawdę każde obszerną dokumentację na temat korzystania z kompasu z Ruby. To niefortunne, ale nie pozwólmy, aby drobne szczegóły, takie jak dokumentacja, zatrzymały nas!

pierwszej próbie

Kiedy szukałem zrobić to samo, tylko szturchnął wokół Kompas source i był w stanie połączyć ten mały skrypt Ruby. Na pierwszy rzut oka wydaje się, rade:

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') 

Ale widocznie Kompas ma kilka opcji konfiguracyjnych domyślnych, które nie są automatycznie włączone przy wywołaniu konstruktora kompilatora bezpośrednio (z których jeden jest SASS load_path). Może to prowadzić do błędów podczas próby importowania funkcji kompasu i wstawek, takich jak:

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

Compass < 1.0.0 (aka "po staremu")

Oto jak zadzwonić kompilator bez nadrzędnymi te domyślne:

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') 

jednak od wersji 1.0.0 Compass, Compass.compiler została zastąpiona Compass.sass_compiler, co prowadzi do ...

Kompas> = 1.0.0 (a.k.a. „Nowa droga”)

Z podziękowaniami dla @philipp na znalezienie how to use the new API możemy ponownie aktualizować ten fragment do pracy z 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! 
+0

Awesome! To jest doskonałe! Występuje niewielka usterka, gdy używam go z 'bundle exec'. Wciąż dostaję błędy, że kompas nie może załadować żadnych mixinów. Zakładam, że jest to zmienna środowiskowa, którą należy ustawić. Czy zdarzy ci się wiedzieć, co należy ustawić? –

+0

Powinienem był dodać błąd, który dostałem ... 'error: Plik do importu nie znaleziony lub nieczytelny: compass/css3.' –

+0

Zacząłem inne pytanie. Myślałem, że to inny problem. Jednak teraz myślę, że jest to bezpośrednio związane. http://stackoverflow.com/questions/13160660/compass-mixins-not-found-when-using-directly-from-ruby. –

0

Po prostu wywołaj metodę kompilacji z wiersza poleceń. Możesz tam określić każdą opcję. Aby zobaczyć wszystkie opcje, uruchom compass help compile.

Poniżej znajduje się przykład. Wypisze skompilowany plik css w tym samym katalogu, co plik test.scss.

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

Można określić i interpolować dowolną liczbę opcji. Należy również sprawdzić to na prowadzenie poleceń w Ruby:

Running command line commands within Ruby script

+1

Dzięki. Chciałem powstrzymać się od rozwidlania procesów systemowych. –

Powiązane problemy