ugrás a tartalomhoz

Hogyan érdemes js-ben buildelni

inf · 2014. Már. 3. (H), 16.53
Szép napot!

Van egy olyan problémám, hogy js-ben gulppal szeretnék több build-et csinálni ugyanarról a kódról, és nem tudom hogyan álljak neki. Jelenleg van egy AMD csomagolt buildem a kódról, illetve hozzá amd csomagolt tesztek karmával és jasmine-el. Ezeket szeretném valahogy portolni commonJS-re, illetve global namespace-re.

Egyelőre két ötletem van. Az egyik, hogy továbbra is AMD-vel fejlesztek, és írok egy tasket, ami kiemeli a közös kódot az AMD csomagolt változatból, és utána újra becsomagolja pl commonJS-be. A másik, hogy kiemelem én kézzel a közös kódot, aztán ezek után úgy fejlesztek, hogy a unit tesztek csak build után futnak le. Ez utóbbinak van egy olyan hátránya, hogyha több modul van a projekten belül, akkor elég nehézkes a használata, mert valamilyen módon vezetni kell, hogy mégis milyen modulokat importálok... Mit tudtok javasolni, ti hogyan oldjátok meg?
 
1

update:Közben találtam amd

inf · 2014. Már. 4. (K), 00.18
update:
Közben találtam amd és commonJS közötti konvertereket. Azt hiszem ezek alapján kidolgozok még további konvertereket. Szóval a válasz valószínűleg az erre a problémára, hogy jobb egy meglévő csomagszerkezetet felhasználni, és utána az abban írt kódot transzformálni a többi csomagszerkezetre. Bizonyos dolgok csak kézzel végezhetőek el ezzel kapcsolatban, pl a teszt rendszer beállítása a további csomagokra, stb... Mindenképp jobb egy tesztelhető kiindulási alap, mint kitalálni valami teljesen idegen dolgot, és a build után tesztelni.

amd2standardjs

commonjs2amd
2

Tovább kutakodtam a témában.

inf · 2014. Már. 9. (V), 10.09
Tovább kutakodtam a témában. A legtöbb ilyen jellegű projekt AST-re (abstract syntax tree, ha jól emlékszem) parsolja az eredeti js kódot (pl: esprima-val, utána tol rá egy transzformációt (pl: estraverse-el vagy esquery-vel), aztán újra buildeli AST-ről (pl: escodegen-el, erre a részre mondjuk nem nagyon van alternatíva).

Ezek elég érdekes eszközök, elcsodálkoztam, hogy egyáltalán létezik ilyen jellegű js parser és builder, mert elég bonyolult dologról van szó.

A másik, amin elcsodálkoztam, hogy az estraverse mennyire furcsa. Valószínűleg az AST formátum anomáliái miatt jöhetett egyáltalán létre egy ilyen rendszer. Sajnos nincs egységes node formátum, és ezért nehézkes végigiterálni a teljes fán, emiatt volt muszáj betenni még egy réteget az AST, és az azt transzformáló kód közé. Ez körülbelül olyan, mintha az XML tervezési hibája miatt muszáj lenne a DOM parser fölé tenni még egy SAX parsert is ahhoz, hogy végig tudjunk iterálni a fán, vagy egyáltalán selectorokat tudjunk alkalmazni. Elég furcsa, és nem tartom elfogadható koncepciónak, hogy a szabvány javítása helyett inkább gányoltak...