Wymyśliłem elegancki, podobny do Railsów sposób na zrobienie tego. Najpierw zmień nazwę .scsspliku na .scss.erb, a następnie użyj następującej składni (przykład zasobu CSS highlight_js-rails4 gem ):
@import "<%= asset_path("highlight_js/github") %>";
Dlaczego nie możesz hostować pliku bezpośrednio przez SCSS :
Wykonywanie @importw SCSS działa dobrze dla plików CSS, o ile jednoznacznie używasz pełnej ścieżki w taki czy inny sposób. W trybie programowania rails sobsługuje zasoby bez ich kompilowania, więc ścieżka taka jak ta działa ...
@import "highlight_js/github.css";
... ponieważ hostowana ścieżka jest dosłownie /assets/highlight_js/github.css. Jeśli klikniesz prawym przyciskiem myszy stronę i „wyświetlisz źródło”, a następnie klikniesz link do arkusza stylów z powyższym @import, zobaczysz tam linię, która wygląda następująco:
@import url(highlight_js/github.css);
Silnik SCSS przekłada się "highlight_js/github.css"na url(highlight_js/github.css). Będzie to działało płynnie, dopóki nie zdecydujesz się spróbować uruchomić go w środowisku produkcyjnym, w którym zasoby są wstępnie skompilowane, a do nazwy pliku wstawiony jest skrót. Plik SCSS nadal będzie przekształcony w plik statyczny, /assets/highlight_js/github.cssktóry nie został wstępnie skompilowany i nie istnieje w środowisku produkcyjnym.
Jak działa to rozwiązanie:
Po pierwsze, przenosząc .scssplik do .scss.erb, skutecznie zmieniliśmy SCSS w szablon dla Railsów. Teraz, ilekroć używamy <%= ... %>tagów szablonów, procesor szablonów Railsów zamieni te fragmenty kodem wyjściowym kodu (tak jak każdy inny szablon).
Podanie asset_path("highlight_js/github")w .scss.erbpliku ma dwie rzeczy:
- Uruchamia
rake assets:precompilezadanie, aby wstępnie skompilować odpowiedni plik CSS.
- Generuje adres URL, który odpowiednio odzwierciedla zasób, niezależnie od środowiska Rails.
Oznacza to również, że silnik SCSS nawet nie analizuje pliku CSS; to tylko hosting linku do niego! Więc nie ma łatek małp hokey ani rażących obejść. Obsługujemy zasób CSS za pośrednictwem SCSS zgodnie z przeznaczeniem i używamy adresu URL do wspomnianego zasobu CSS zgodnie z przeznaczeniem Railsów. Słodkie!