Ho trovato un modo elegante e simile a Rails per farlo. Innanzitutto, rinominare il .scss
file in .scss.erb
, quindi utilizzare la sintassi in questo modo (esempio per l' asset CSS highlight highlight_js-rails4 ):
@import "<%= asset_path("highlight_js/github") %>";
Perché non è possibile ospitare il file direttamente tramite SCSS :
Fare uno @import
in SCSS funziona bene per i file CSS purché usi esplicitamente il percorso completo in un modo o nell'altro. In modalità di sviluppo, rails s
serve le risorse senza compilarle, quindi un percorso come questo funziona ...
@import "highlight_js/github.css";
... perché il percorso ospitato è letteralmente /assets/highlight_js/github.css
. Se fai clic con il pulsante destro del mouse sulla pagina e "visualizza sorgente", quindi fai clic sul collegamento per il foglio di stile con quanto sopra @import
, vedrai una riga che appare come:
@import url(highlight_js/github.css);
Il motore SCSS si traduce "highlight_js/github.css"
in url(highlight_js/github.css)
. Questo funzionerà a dovere fino a quando non decidi di provare a eseguirlo in produzione in cui le risorse sono precompilate hanno un hash iniettato nel nome del file. Il file SCSS verrà comunque risolto in uno statico /assets/highlight_js/github.css
che non è stato precompilato e non esiste in produzione.
Come funziona questa soluzione:
Innanzitutto, spostando il .scss
file in .scss.erb
, abbiamo effettivamente trasformato SCSS in un modello per Rails. Ora, ogni volta che usiamo<%= ... %>
tag modello, il processore del modello Rails sostituirà questi frammenti con l'output del codice (proprio come qualsiasi altro modello).
Dichiarare asset_path("highlight_js/github")
nel .scss.erb
file fa due cose:
- Attiva l'
rake assets:precompile
attività per precompilare il file CSS appropriato.
- Genera un URL che riflette in modo appropriato la risorsa indipendentemente dall'ambiente Rails.
Questo significa anche che il motore SCSS non sta nemmeno analizzando il file CSS; sta solo ospitando un link ad esso! Quindi non ci sono patch di scimmie hokey o soluzioni alternative grossolane. Stiamo servendo una risorsa CSS tramite SCSS come previsto e utilizzando un URL per detta risorsa CSS come previsto da Rails. Dolce!