Bunu yapmak için zarif, Rails benzeri bir yol buldum. Öncelikle .scss
dosyanı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 :
@import
SCSS'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 s
varlı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, @import
iç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, .scss
dosyayı taşıyarak .scss.erb
SCSS'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.erb
dosyanın iki şey yapar:
rake assets:precompile
Uygun 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ı!