Bunu yapmak için zarif, Rails benzeri bir yol buldum. Öncelikle .scssdosyanızı şu şekilde yeniden adlandırın .scss.erb, ardından böyle bir sözdizimi kullanın ( vurgulama_js-rails4 gem CSS öğesi için örnek ):
@import "<%= asset_path("highlight_js/github") %>";
Dosyayı neden doğrudan SCSS aracılığıyla barındıramıyorsunuz :
@importSCSS'de yapmak , tam yolu bir şekilde veya başka şekilde kullandığınız sürece CSS dosyaları için iyi çalışır. Geliştirme modunda, rails svarlıkları derlemeden sunar, böylece böyle bir yol çalışır ...
@import "highlight_js/github.css";
... çünkü barındırılan yol tam anlamıyla /assets/highlight_js/github.css. Sayfayı sağ tıklatıp "kaynağı görüntüle" yi tıklarsanız, ardından yukarıdaki sayfayla stil sayfasının bağlantısını tıklarsanız, @importiçinde şöyle görünen bir satır görürsünüz:
@import url(highlight_js/github.css);
SCSS motoru çevirir "highlight_js/github.css"için url(highlight_js/github.css). Bu, varlıkların önceden derlendiği üretimde çalıştırmaya karar verene kadar yüzme adıyla çalışacak ve dosya adına bir karma eklenecektir. SCSS dosyası hala /assets/highlight_js/github.cssönceden derlenmemiş ve üretimde olmayan bir statik çözülecektir .
Bu çözüm nasıl çalışır:
Birincisi, .scssdosyayı taşıyarak .scss.erbSCSS'yi Rails için bir şablona dönüştürdük. Artık, <%= ... %>şablon etiketlerini her kullandığımızda , Rails şablon işlemcisi bu parçacıkları kodun çıkışıyla değiştirecektir (diğer şablonlarda olduğu gibi).
Belirten asset_path("highlight_js/github")içinde .scss.erbdosyanın iki şey yapar:
rake assets:precompileUygun CSS dosyasını önceden derlemek için görevi tetikler .
- Rails ortamından bağımsız olarak varlığı uygun şekilde yansıtan bir URL oluşturur.
Bu ayrıca SCSS motorunun CSS dosyasını ayrıştırmadığı anlamına gelir; sadece bir bağlantıyı barındırıyor! Yani hokey maymun yamaları ya da iğrenç çözümler yok. Bir CSS varlığını amaçlandığı şekilde SCSS üzerinden sunuyoruz ve adı geçen CSS varlığına Rails amaçlanan bir URL kullanıyoruz. Tatlı!