A Symfony projectekben a UI kódok buildje során ez a hibaüzenet jön szembe egy idő után:
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
Mi ez a probléma?
A browserslist
hivatkozik a caniuse-lite
csomagra ami egy idő után elavul. Elég agresszív a hibaüzenet és tökre elnyomja a valódi hibákat is. A fejlesztő persze meg tudja indokolni, hogy ez miért kell, talán érthető is, a mód viszont tökre ellenszenves. Azt nem veszi csak figyelembe, hogy ha a caniuse-lite
-ot nem te használod direktben, és történetesen yarnt használsz, a függőségi fa mélyebb részén lévő csomagot a yarn nem tudja frissíteni. A yarntól el is lehetne térni, de a symfony/encore alapból azt javasolja, a nyilvánvaló problémáival együtt. A browserslist
elképzelése szerint minden héten minden csomagot mindig frissíteni kéne, ami szerintem nonszensz. Ennyi kecske nincs a világon.
Milyen megoldást találtam ki erre?
Szerintem alapból azt kéne csinálnia a browserslist
csomagnak, hogy nem mint node függőség teszi fel a csomagot, hanem egy cache
mappába tölti le, mint egy csomag, és onnan húzza be az információkat. Innen jött az ötlet, hogy kiszervezem a caniuse-lite
csomagot a build környezetből és csak azt az egy csomagot frissen tartom anélkül, hogy a yarn
-t lecserélném. A build folyamat részévé tettem az alábbi lépéseket:
- Feltelepítem pontosan azokat a csomagokat amiket a
lock
file kíván - Feltelepítem/frissítem globálisan a
caniuse-lite
csomagot - Rákényszerítem a node modul keresést a
NODE_PATH
env. variable segítségével, hogy a helyi telepítések helyett a globális könyvtárban találhatót használja amit viszont én mindig frissen tartok.
Szerintem a caniuse-lite
-ot egyébként is így kéne használni, hogy egy központi helyre települ minden metaadat amit használ a többi csomag.