2014-05-15 18 views
5

Nie wiem, czy mogę wyjaśnić problem bez wklejenia całego kodu wszystkich plików, ale spróbuję.Kompas/SASS - nie wszystkie pliki są kompilowane

EDIT Dodałem cały kod do GitHub konta - My Sass structure

używam Windows 8.1 i kompas 0.12.6

W moim folderze public_html mam config.rb teczkę i arkusze stylów. W folderze stylesheets mam katalog sass, w którym przechowuję wszystkie pliki sass. Pliki CSS są generowane w folderze stylesheets/preview (do celów programistycznych) oraz w folderze stylesheets (do celów produkcyjnych).

biegnę kompas oglądania uruchomiony skrypt watch.bat że mam w folderze public_html

Zawartość watch.bat jest:

START compass watch -c config.rb -e development 
START compass watch -c config.rb -e production 
EXIT 

Mój plik config.rb jest:

require 'compass/import-once/activate' 
# Require any additional compass plugins here. 

# Set this to the root of your project when deployed: 
http_path = "../" 

sass_dir = "stylesheets/sass" 
images_dir = "img" 
javascripts_dir = "js" 
cache = false 
relative_assets = true 


add_import_path "stylesheets/sass" 


if environment == :development 
    css_dir = "stylesheets/preview" 
    line_comments = true 
    output_style = :nested 
end 

if environment == :production 
    css_dir = "stylesheets" 
    line_comments = false 
    output_style = :compressed 
end 

W arkuszu stylów/sass Mam 4 pliki print.scss, medium.scss, small.scss i large.scss

Oba medium.scss i large.scss zacząć:

@import "base/_init"; 

Ten plik importu częściowego _init z katalogu bazowego i ten ładuje kolejne partials i inne partials załadować kolejne partials.

Problem polega na tym, że zmieniam coś w częściowym Kompas nie zawsze kompiluje wszystkie niezbędne pliki wyjściowe. Na przykład właśnie zmieniłem coś w _settings.scss częściowe i ten jest ostatecznie ładowany przez medium.scss i large.scss (przypominam, że te 2 pliki mają ten sam początek, więc obie powinny zostać skompilowane). W rzeczywistości tak naprawdę tylko plik medium.scss jest obserwowany, a plik large.scss nie jest skompilowany, tak jak powinno być w tym przypadku.

Taką sytuację miałem wcześniej. I zatykać 2 obserwatorów (Ctrl + C i Y), a następnie uruchom ponownie mój watch.bat nie zmieniania czegokolwiek w plikach - tuż po uruchomieniu mam informację:

Zmień wykryty na 15:51 : 33 do: large.scss nadpisuje arkusze stylów/preview/large.css Kompas jest sondowaniem zmian. Naciśnij Ctrl-C, aby zatrzymać.

i

Zmień wykryty w 15:51:33 do: large.scss nadpisania stylów/large.css Kompas jest sondowania zmian . Naciśnij Ctrl-C, aby zatrzymać.

Więc w rzeczywistości nie było zmiany, które należy obserwować, ale jakoś Kompas/Sass nie zawsze go złapać.

Czasami żaden z 2 obserwatorów nie przechwytuje zmian i muszę je zatrzymać i po raz kolejny uruchomić watch.bat, więc nie jest to wygodne do pracy w ten sposób.

Czasem zdarza się nawet, że obserwatorzy są zatrzymywani (tak jak ja użyłem CTRL + C + y), ale niczego nie wciskam, a w cmd nie ma mowy o zamknięciu widocznym. Właśnie przestali

Pytanie: Co może być nie tak i jak to naprawić?

+1

Wskazówka: Czy mógłbyś utworzyć repozytorium w Github z bieżącą strukturą projektu? W ten sposób ktoś może go sklonować i odtworzyć twoje otoczenie. –

+0

Dzięki za sugestię. Właśnie dodałem swoją strukturę projektu do github –

Odpowiedz

4

Sklonowałem i sprawdziłem strukturę twojego projektu, a twoim problemem jest po prostu niepotrzebne użycie wtyczki Import Once. Jeśli skomentujesz pierwszy wiersz pliku config.rb (tam, gdzie ta wtyczka jest aktywna), twoje arkusze stylów zostaną skompilowane normalnie. Każdy główny plik SCS (large.css, medium.css, small.css) jest renderowany do oddzielnego pliku css i nie powtarza się importu dla każdego z tych plików.

Poniżej znajduje się sekwencja swoimi importu z importu Po plugin niepełnosprawnych:

enter image description here

+0

. Proszę wyjaśnić, w jaki sposób może wpłynąć na mój obecny projekt? O ile mi wiadomo, ta dyrektywa sprawia, że ​​kiedy używam importu "aaa"; importuj "aaa"; "aaa" zostanie zaimportowane tylko raz.Problem polega na tym, że czasami wszystko działa normalnie, a czasami nie (nie testowałem jeszcze komentowania tej linii). –

+0

Chociaż nigdy nie korzystałem z tej wtyczki, myślę, że ignoruje ona zmiany w pliku, który został już zaimportowany (np .: Jeśli importujesz _init.scss dwa razy, jeden wewnątrz large.scss, drugi raz w medium.scss, ostatni @port będzie ignorowany, a to jest całkowicie błędne zachowanie, gdy naprawdę potrzebujesz tego pliku zaimportowanego w obu przypadkach). –

+0

import-once ma dobry cel, ale powoduje problemy, gdy ta sama część jest zawarta w wielu plikach wyjściowych .scss. Pomimo tego, że jest to "najlepsza praktyka", kompas wydaje się być całkowicie dostosowany do projektów z jednym plikiem wyjściowym. https://github.com/Compass/compass/blob/master/import-once/README.md – TheSean

0

I dont't dokładnie wiedzieć, jak rozwiązać problem.

Myślę, że w zasadzie jest to błąd lub problem z dwoma wystąpieniami kompasu uruchomionymi w tym samym czasie w tym samym folderze.

Ale ze względu na środowisko, mam sugestię, która może załatwić sprawę.

Dlaczego, zamiast mieć dwa foldery z zasobami, jeden dla prod. i dev., po prostu zachowaj jeden, dla obu dev. i prod.

To, co możesz ustawić w kompasie, to wyprowadzanie css w sposób, jaki chcesz dla dev. a następnie przekazać to css przez filtr yui (lub cokolwiek innego) dla prod. Spowoduje to zminimalizowanie wszystkich zasobów. Jeśli używasz Symfony, możesz na przykład użyć zasobów. Tak postępujemy i działa idealnie. Nie używamy aktywów dla kompasu ... to jest inny temat: D

Jeśli nie stosujesz żadnych filtrów ramowych lub dodatkowych, możesz ręcznie zrzucić zasoby, gdy te są gotowe do produkcji.

W ten sposób unika się używania dwóch instancji kompasu jednocześnie, a także kompilacji ręcznej dla każdego wdrożenia podczas produkcji.

Naprawdę myślę, że ma to związek z dwoma uruchomionymi kompasami.