Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: fortran1986 18. 06. 2019, 13:04:32

Název: Preprocessor nad JS / TS
Přispěvatel: fortran1986 18. 06. 2019, 13:04:32
V práci programujeme jedno  CMR v Reacte. Je napísané v JS a TS (nové moduly sú v TS staršie v JS). Občas si potrebujem aplikáciu prispôsobiť testovaniu a prepnúť do testovacieho režimu a na tento účel v iných jazykoch používam prepínače preprocessora. Ale JS resp TS v základe nič také nemá. Nakódil som si teda libku čo emuluje preprocessor je to len primitívny modul ktorý pridal syntaktický cukor nad JS ale na prvý pohľad sa to správa podobne ako skutočné prepínače.

Kolegom vadí že sa do kódu dostávajú zbytočné podmienky. Síce vyhodnotenie podmienok trvá pár ms, ale majú pravdu že z dlhodobého hľadiska to neni najideálnejšie riešenie lebo za 10 rokov môže kód naboptnať (programátor musí myslieť na budúcnosť). Čo s tým? Napadlo ma viacero riešení:

0. ostať pri terajšom stave šak to zase neni až také hrozné.
1. napísať vlastný preprocessor
2. použiť nejaké už existujúce riešenie pre JS / TS  (viete o niečom?)
3. použiť preprocessor z C (toto by bolo asi najlepšie) - ale dá sa to?
4. nejaký iný nápad?
Název: Re:Preprocessor nad JS / TS
Přispěvatel: gill 18. 06. 2019, 13:38:04
nevynalezejte kolo. existuji pluginy pro gulp/grunt/webpack, ktere delaji to stejne. treba

https://www.npmjs.com/package/grunt-strip-code

https://www.npmjs.com/package/webpack-preprocessor-loader

ale podle me to neni potreba, jsou lepsi zpusoby
Název: Re:Preprocessor nad JS / TS
Přispěvatel: Kit 18. 06. 2019, 14:05:23
Když budeš testovat jednotky, tak žádné přepínače v kódu nebudou potřebné.
Název: Re:Preprocessor nad JS / TS
Přispěvatel: fortran1986 18. 06. 2019, 14:24:07
nevynalezejte kolo. existuji pluginy pro gulp/grunt/webpack, ktere delaji to stejne. treba

https://www.npmjs.com/package/grunt-strip-code

https://www.npmjs.com/package/webpack-preprocessor-loader

ale podle me to neni potreba, jsou lepsi zpusoby

aké spôsoby máte na mysli? lebo na tie som práve zvedavý od toho je tu táto téma.

Když budeš testovat jednotky, tak žádné přepínače v kódu nebudou potřebné.

krásna teória, ale bohužiaľ nežijeme v ideálnom svete na to aby bolo možné TDD musia sa dodržiavať niektoré zásady ktoré sa u nás na FE absdolútne nedodržiavajú :( viac radšej nebudem komentovať...

druhá vec je že u seba doma kde tieto zásady dodržiavam občas potrebujem použiť prepínač.
Název: Re:Preprocessor nad JS / TS
Přispěvatel: pangolin 18. 06. 2019, 14:34:57
Môžeš uviesť nejaké konkrétne príklady?

Mock-ovacie frameworky typicky fungujú, takže naozaj asi nie je rozumný dôvod kaziť produkčný kód testovacími prepínačmi a vymýšľať nejaké custom riešenie na kolene.
Název: Re:Preprocessor nad JS / TS
Přispěvatel: gill 18. 06. 2019, 22:59:15
nevynalezejte kolo. existuji pluginy pro gulp/grunt/webpack, ktere delaji to stejne. treba

https://www.npmjs.com/package/grunt-strip-code

https://www.npmjs.com/package/webpack-preprocessor-loader

ale podle me to neni potreba, jsou lepsi zpusoby

aké spôsoby máte na mysli? lebo na tie som práve zvedavý od toho je tu táto téma.

normalni podminku? V JS je vse vyhodnocovano za behu, podminene definice nebo podminene nacitane moduly nejsou problem.
Název: Re:Preprocessor nad JS / TS
Přispěvatel: MiKu 19. 06. 2019, 17:57:08
Tak možností je více. V PHP kde je situace obdobná, jsem to vždycky řešil přes konfiguraci. Prostě v konfiguraci aplikace - nějaký JSON - je nastaveno to co je potřeba k tomu, aby se aplikace nahodila do vývojového režimu. Tuhle konfiguraci si aplikace načte a pracuje s tím, "ifuje" se podle tohoto.

U javascriptu pak lze využít toho odkazovaného modulu do webpacku, případně i bez pluginu myslím přes npm script volat webpack s nějakými environment proměnnými a webpack je sám "vymění".
Název: Re:Preprocessor nad JS / TS
Přispěvatel: Kit 19. 06. 2019, 20:35:38
Tak možností je více. V PHP kde je situace obdobná, jsem to vždycky řešil přes konfiguraci. Prostě v konfiguraci aplikace - nějaký JSON - je nastaveno to co je potřeba k tomu, aby se aplikace nahodila do vývojového režimu. Tuhle konfiguraci si aplikace načte a pracuje s tím, "ifuje" se podle tohoto.

V PHP je to ještě jednodušší - místo index.php zavolám něco jiného.