Ich fand einen eleganten, Rails-ähnlichen Weg, dies zu tun. Benennen Sie zuerst Ihre .scssDatei in um .scss.erbund verwenden Sie dann die folgende Syntax (Beispiel für das CSS-Asset "light_js-rails4 gem " ):
@import "<%= asset_path("highlight_js/github") %>";
Warum können Sie die Datei nicht direkt über SCSS hosten? :
Das Ausführen eines @importin SCSS funktioniert für CSS-Dateien einwandfrei, solange Sie den vollständigen Pfad explizit auf die eine oder andere Weise verwenden. rails sVersorgt Assets im Entwicklungsmodus, ohne sie zu kompilieren, sodass ein Pfad wie dieser funktioniert ...
@import "highlight_js/github.css";
... weil der gehostete Pfad buchstäblich ist /assets/highlight_js/github.css. Wenn Sie mit der rechten Maustaste auf die Seite klicken und "Quelle anzeigen" und dann auf den Link für das Stylesheet mit den obigen Angaben klicken @import, wird dort eine Zeile angezeigt, die wie folgt aussieht:
@import url(highlight_js/github.css);
Die SCSS-Engine übersetzt "highlight_js/github.css"in url(highlight_js/github.css). Dies funktioniert reibungslos, bis Sie versuchen, es in der Produktion auszuführen, in der Assets vorkompiliert werden und ein Hash in den Dateinamen eingefügt wird. Die SCSS-Datei wird weiterhin in eine statische Datei aufgelöst /assets/highlight_js/github.css, die nicht vorkompiliert wurde und in der Produktion nicht vorhanden ist.
So funktioniert diese Lösung:
Erstens haben wir durch Verschieben der .scssDatei .scss.erbdas SCSS effektiv in eine Vorlage für Rails verwandelt. Nun, wann immer wir verwenden<%= ... %> Vorlagen-Tags verwenden, ersetzt der Rails-Vorlagenprozessor diese Snippets durch die Ausgabe des Codes (genau wie bei jeder anderen Vorlage).
Das Angeben asset_path("highlight_js/github")in der .scss.erbDatei bewirkt zwei Dinge:
- Löst die
rake assets:precompileAufgabe zum Vorkompilieren der entsprechenden CSS-Datei aus.
- Generiert eine URL, die das Asset unabhängig von der Rails-Umgebung angemessen widerspiegelt.
Dies bedeutet auch, dass die SCSS-Engine nicht einmal die CSS-Datei analysiert. Es wird nur ein Link dazu gehostet! Es gibt also keine hokey Affenflecken oder grobe Problemumgehungen. Wir stellen ein CSS-Asset wie vorgesehen über SCSS bereit und verwenden eine URL zu diesem CSS-Asset wie beabsichtigt. Süss!