[quote=“filiptepper, post:10, topic:8486, full:true”]
Poka poka!
[/quote]Wiesz, skojarzyło mi się to z pika pika!, chociaż pokemonów, nie oglądałem i nie byłem ich zwolennikiem. Ale do rzeczy:
Pierwszym problemem w assetach posiadających plik bower.json (niestety nie wszystkie posiadają ten plik, w niektórych bibliotekach autor uznaje że plik bower.json jest mu zupełnie nie potrzebny) jest zawartość sekcji “main”. Oprę się na przykładzie bootstrapa i font awesome.
W bootstrapie sekcja main pliku bower.json wygląda tak:
"main": [
"less/bootstrap.less",
"dist/css/bootstrap.css",
"dist/js/bootstrap.js",
"dist/fonts/glyphicons-halflings-regular.eot",
"dist/fonts/glyphicons-halflings-regular.svg",
"dist/fonts/glyphicons-halflings-regular.ttf",
"dist/fonts/glyphicons-halflings-regular.woff"
],
a w font-awesome wygląda tak:
"main": [
"./css/font-awesome.css",
"./fonts/*"
],
mimo że obydwie biblioteki mają swoje źródła css napisane w less to font-awesome nie ma informacji o tym w main, co powoduje, że do pliku less nie można się prosto odwołać.
A application.css wpisywałem wcześniej:
= require bootstrap
= require font-awesome
to powodowało, że prawdopodobnie bower automatycznie rozwijał path do pliku na podstawie tego co miał zapisane w sekcji main. I tak dla bootstrapa wybierał mi
less/bootstrap.less
a dla font-awesome wybierał mi
css/font-awesome.css
co już wprowadza niekonsekwencję, ale ona bazuje na tym co autor zechce lub nie zechce wpisać do bower.json, ale załóżmy na chwilę, że z tym możemy się pogodzić, w development fonty ładowane są prawidłowo bo ścieżka jest dłuższa, natomiast w środowisku testowym generowany jest jeden plik /assets/application.css i to powoduje, że path do fontów już jest nieprawidłowy, okazało się że bower-rails dostarcza rake task
rake bower:resolve # Resolve assets paths in bower components
który konwertuje pliki css do plików css.erb i wstawia odwołanie do asset_path tak, żeby font, obrazki, … działały w ror. Niestety zamiana plików css na css.erb powoduje, że proste odwołanie do assetów z bower już nie zadziała, bo plik
dist/css/bootstrap.css => dist/css/bootstrap.css.erb
./css/font-awesome.css => ./css/font-awesome.css.erb
więc w pliku application.css trzeba wpisać już konkretną ścieżkę do pliku erb
= require bootstrap/dist/css/bootstrap
= require font-awesome/css/font-awesome
Tylko podobno z tym jest jakiś problem przy prekompilacji assetów na produkcji (tego jeszcze nie sprawdzałem). Przypadek powyżej opisuje sytuację wykorzystania plików css, ale jak biblioteka ma pliki sass lub less to w tych plikach umieszczone są zmienne które pozwalają określić ścieżkę i wtedy nie trzeba już cudować z tym rake taskiem.
Z plikami less tak to rozwiązałem:
application.css
/*
*= require vendor_less
*/
vendor_less.css
@import "bootstrap/less/bootstrap";
@icon-font-path: '/assets/bootstrap/dist/fonts/';
@import "font-awesome/less/font-awesome";
@fa-font-path: '/assets/font-awesome/fonts/';
Minusem tutaj jest konieczność podawania dłuższej ścieżki do pliku, ale jak na razie uważam, że jest to lepsze niż korzystanie z gemów assetowych, czy rails-assets. Może z biegiem czasu natknę się na problem z tym bowerem nie do przeskoczenia i wtedy zrewiduje swoje poglądy.