Descubrí una forma elegante, similar a Rails, de hacerlo. Primero, cambie el nombre de su .scss
archivo a .scss.erb
, luego use una sintaxis como esta (ejemplo para el recurso CSS CSS Jewellery_js-rails4 ):
@import "<%= asset_path("highlight_js/github") %>";
Por qué no puede alojar el archivo directamente a través de SCSS :
Hacer un @import
SCSS funciona bien para archivos CSS siempre y cuando explícitamente uses la ruta completa de una forma u otra. En modo de desarrollo, rails s
sirve activos sin compilarlos, por lo que un camino como este funciona ...
@import "highlight_js/github.css";
... porque la ruta alojada es literalmente /assets/highlight_js/github.css
. Si hace clic con el botón derecho en la página y "ver fuente", luego hace clic en el enlace de la hoja de estilo con lo anterior @import
, verá una línea allí que se parece a:
@import url(highlight_js/github.css);
El motor SCSS se traduce "highlight_js/github.css"
en url(highlight_js/github.css)
. Esto funcionará a la perfección hasta que decida intentar ejecutarlo en producción donde los activos están precompilados e inyectar un hash en el nombre del archivo. El archivo SCSS seguirá resolviéndose en una estática /assets/highlight_js/github.css
que no fue precompilada y que no existe en producción.
Cómo funciona esta solución:
En primer lugar, al mover el .scss
archivo a .scss.erb
, hemos convertido efectivamente el SCSS en una plantilla para Rails. Ahora, siempre que usemos <%= ... %>
etiquetas de plantilla, el procesador de plantillas de Rails reemplazará estos fragmentos con la salida del código (como cualquier otra plantilla).
Establecer asset_path("highlight_js/github")
en el .scss.erb
archivo hace dos cosas:
- Activa la
rake assets:precompile
tarea para precompilar el archivo CSS apropiado.
- Genera una URL que refleja adecuadamente el activo independientemente del entorno de Rails.
Esto también significa que el motor SCSS ni siquiera analiza el archivo CSS; ¡solo está alojando un enlace! Por lo tanto, no hay parches de mono hokey o soluciones brutas. Servimos un activo CSS a través de SCSS según lo previsto, y usamos una URL para dicho activo CSS como Rails pretendía. ¡Dulce!