Preprocessor nad JS / TS

Preprocessor nad JS / TS
« kdy: 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?


gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Preprocessor nad JS / TS
« Odpověď #1 kdy: 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
« Poslední změna: 18. 06. 2019, 13:41:04 od gill »

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Preprocessor nad JS / TS
« Odpověď #2 kdy: 18. 06. 2019, 14:05:23 »
Když budeš testovat jednotky, tak žádné přepínače v kódu nebudou potřebné.

Re:Preprocessor nad JS / TS
« Odpověď #3 kdy: 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č.

Re:Preprocessor nad JS / TS
« Odpověď #4 kdy: 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.


gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Preprocessor nad JS / TS
« Odpověď #5 kdy: 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.

Re:Preprocessor nad JS / TS
« Odpověď #6 kdy: 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í".

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Preprocessor nad JS / TS
« Odpověď #7 kdy: 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.