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
lockfile kíván - Feltelepítem/frissítem globálisan a
caniuse-litecsomagot - Rákényszerítem a node modul keresést a
NODE_PATHenv. 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.