Laravel 4 un palīgmateriālu (assets) pārvaldība

Jānis Rubļevskis (koko) // 2014. gada 24. novembrī, 10:25 // #Tehnoloģijas // 2 komentāri 

Laravel ir php freimworks (turpmāk FW), kuru weblapu izstrādei izmantoju jau kādus 3 gadus. Sāku ar 3.x versiju, kuru iemācīties lietot bija daudz vieglāk kā ceturto, bet šoreiz stāsts vairāk tieši par html palīgmateriālu pārvaldi - par assetiem (tie ir JavaScript faili, CSS faili, attēli, ko izmanto dizainā, fonti un līdzīgi).

Ar Laravel 3.x bija ļoti vienkārši, jo palīgmateriālu pārvaldība kaut kādā ļoti primitīvā formā jau bija integrēta pašā FW, tāpēc galvenais bija pareizi visu izdarīt, bet 4. versija tika radīta diezgan "plika" šajā ziņā - visu var pieinstelēt un piekonfigurēt kā nu pašam patīk - atliek tikai meklēt.

Tā kā ceturtais Laravel ir izveidots tā, lai tam būtu viegli pievienot dažādas bibliotēkas ar composer palīdzību, tad šoreiz paveras durvis izvēlēties sev vajadzīgo un projektam noderīgāko risinājumu. Diemžēl ar asset menedžmentu līdz šim bija diezgan pašvaki, taču izskatās, ka lietas mainās uz labo pusi.

Šis blogs raksta tapšanas brīdī arī ir radīts uz Laravel 4 bāzes un kā asset menedžmentu izmanto CodeSleeve  Asset Pipeline. Tas ir projekts, kas iespaidojies no Rails ekvivalenta un strādā diezgan labi, tomēr es saskāros ar divām lietām, kas man lika pameklēt kaut ko labāku:

  1. CodeSleeve asset pipeline CSS un JavaScript minimizāciju veic servera pusē (PHP), izveidojot attiecīgi arī kešu ar minimizētajiem failiem. Diemžēl šis process strādāja atšķirīgi izstrādes vidē un produkcijas vidē. Rezultāts bija tāds, ka uz produkcijas servera nācās izslēgt CSS minimizācija, jo tā strādāja nekorekti, izgriežot laukā daudzas vajadzīgas lietas.
  2. CodeSleeve kompresētos assetus padod caur php un vienmēr ar vienādu faila nosaukumu. Iespējams, ka es palasīju par maz, bet neatradu kā to faila nosaukumu pamainīt attiecīgi, ja man ir pamainījies faila saturs, kas ir nepieciešams gala lietotājam, kurš nezina, ka jāiztīra kešs, jo esmu kaut ko jaunu uzkodējis.

Pameklējot pusotru mēnesi vēlāk, izrādījās, ka attīstība notikusi. Balstoties uz to pašu Asset Pipeline principu, ir izstrādāta Larasset composer paka, kas domāta tieši Laravel 4.1+ sistēmām. Ar šo projektu gribu padalīties vairāku iemeslu dēļ:

  1. Izstrādes vidē asseti tiek padoti ar lokālā node.js serverīša palīdzību, respektīvi, reālā laikā visas izmaiņas tiek sakompilētas un nodotas uz browseri.
  2. Produkcijas videi visi palīgmateriāli tiek prekompilēti jau izstrādes vidē. Tas nozīmē, to, ka visi faili tiek uzģenerēti formā faila-nosaukums-.paplašinājums. Tas atkal sniedz vairākus ļoti nozīmīgus bonusus:
    1. vienmēr produkcijas vidē nonāks tieši tāds pats failu saturs, kāds tas ir izstrādes vidē.
    2. visiem assets direktorijas failiem var likt neierobežotu keša ilgumu, jo nekad nebūs tāda situācija, kad būs pamainījies faila saturs, bet nebūs pamainījies faila nosaukums.
    3. Visi faili tiek servēti statiski, kas ietaupa procesora laiku.
  3. Var izmantot arī valodu preprocesorus, piemēram LESS CSS failiem, CoffeeScript un EJS JavaScript failiem un līdzīgi - faili tiks automātiski pārkompilēti uz pareizo izejas formātu.

Ja ir interese par šo tēmu nedaudz izvērstāk, tad varu uzrakstīt arī nelielus padomus kā to visu ieviest dzīvē, taču domāju, ka pietiek ar jau esošo dokumentāciju. Vēlos tikai vienu pateikt priekšā - ja vēlaties izmantot CSS vai JavaScript pusē linkus uz asset direktorijas failiem, tad jāizmanto kādu no valodu preprocesoriem, jo tad fails tiks pārkompilēts un saites tiks saliktas pareizi, piemēram, lai LESS ieliktu konteinerim backgraund-image, jāraksta sekojoši:

@bg-image: asset_path('bg.png');
.wrapper { .. backgroun-image: url(@bg-image); .. }

Tādā veidā panāksiet, ka izstrādes vidē css fails izskatīsies .wrapper { .. background-image(bg.png); .. } , bet produkcijā .wrapper { .. background-image(bg-garais-md5-heš.png); ..}

Komentāri

Ē, kāds citādāks nobody.lv!

Par asset-management neko daudz nezinu, bet varu leptni ziņot - LU DF otrā kursa studentiem tagad PHP māca tieši uz Laravel, tā ka nākamie praktikanti būs jau ar šādu zināšanu bagāžu. Un, cita starpā, visi lekciju materiāli ir interesentiem pieejami (Tev tur nekā jauna nebūs) - http://estudijas.lu.lv/course/view.php?id=1348 ; nevajag baidīties "pieslēgties kā viesim"

Supper, ka LU nesnauž. Tiešām, iesaku jauniešiem paskatīties lekciju saturu un, iespējams, tas viss ieinteresē.

Zini, es uz fikso uzmetu aci un iesaku palasīt arī zinošiem programmētājiem, jo ir lietas, kas paskrējušas garām vai nedaudz aizmirsušās :)

Paud savu subjektīvo viedokli:

Visi lauki (izņemot interneta vietni) aizpildāmi obligāti!
E-pasts publiski netiks parādīts.
Zinot vairākumu, komentāros tagi netiek atrādīti kā tagi. Linki automātiski pārveidosies par spiežamiem (cerams).
Bloga īpašnieks patur tiesības ļaunus komentārus dzēst vai pārveidot cilvēkiem patīkamākā formā, bet tajā pašā laikā neatbild par komentāru saturu.