Rspack-kehitysympäristöön tarkoitettu eslint-rspack-plugin on saanut merkittävän päivityksen version 5.0.0 myötä. Uusi julkaisu tuo mukanaan yhden suurimmista muutoksista projektin historiassa, sillä lisäosa on nyt julkaistu kokonaan puhtaana ECMAScript Modules (ESM) -pakettina. Samalla CommonJS-versio on poistettu käytöstä, mikä yhdenmukaistaa lisäosan muun Rstack-ekosysteemin kanssa.
Muutos seuraa Rspack 2.0 linjaa, jossa myös ydinkomponentit siirrettiin kokonaan ESM-pohjaisiksi. Kehittäjien tavoitteena on modernisoida koko työkaluketju ja hyödyntää nykyisten Node.js-versioiden tarjoamia ominaisuuksia entistä tehokkaammin.
CommonJS jää historiaan
Version 5.0.0 suurin tekninen muutos on CommonJS-rakennelman poistuminen. Nyt eslint-rspack-plugin toimitetaan ainoastaan ESM-pakettina, mikä vastaa nykyisiä JavaScript-kehityksen suosituksia.
Käytännössä muutos ei kuitenkaan aiheuta ongelmia suurimmalle osalle kehittäjistä. Node.js 20 ja sitä uudemmat versiot tukevat ESM-moduulien lataamista myös require()-kutsujen kautta, joten useimmat projektit voivat päivittää uuteen versioon ilman merkittäviä koodimuutoksia.
ESLint toimii edelleen osana rakennusprosessia
Vaikka pakettirakenne muuttuu, lisäosan toimintaperiaate säilyy ennallaan. eslint-rspack-plugin suorittaa ESLint-tarkistukset osana Rspackin käännösprosessia.
Watch-tilassa lisäosa tarkistaa uudelleen vain ne tiedostot, jotka ovat muuttuneet edellisen käännöksen jälkeen. Tämä vähentää turhia tarkistuksia ja nopeuttaa kehitystyötä verrattuna koko projektin linttaamiseen jokaisen muutoksen yhteydessä.
Lisäosa perustuu alun perin eslint-webpack-plugin-projektiin, minkä vuoksi sen asetukset tuntuvat tutuilta erityisesti webpackia aiemmin käyttäneille kehittäjille.
Tutut ominaisuudet säilyvät
Version 5.x mukana säilyvät kaikki tärkeimmät ominaisuudet aiemmista julkaisuista. Lisäosa tukee esimerkiksi välimuistia, joka on oletuksena käytössä suorituskyvyn parantamiseksi. Kehittäjät voivat myös valita käytettävän ESLint-konfiguraatiomallin joko perinteisen eslintrc-rakenteen tai uudemman Flat Config -mallin välillä.
Lisäksi käytettävissä ovat:
- monisäikeinen linttaus (threads)
- koko projektin linttaus lintAllFiles-asetuksella
- välimuistin käyttö suorituskyvyn parantamiseksi
- tuki useille eri rakennusympäristöille
Erityisesti lintAllFiles-vaihtoehto on hyödyllinen monimutkaisissa asiakas- ja palvelinpuolen projekteissa, joissa kaikki tiedostot eivät välttämättä kuulu samaan riippuvuusketjuun.
Rakennuksen aikainen linttaus ei ole aina paras ratkaisu
Projektin kehittäjät muistuttavat kuitenkin, ettei ESLintin ajaminen jokaisen rakennuksen yhteydessä ole aina tehokkain ratkaisu.
Virallisessa dokumentaatiossa todetaan, että erillinen lint-komento voi monissa projekteissa tarjota paremman suorituskyvyn, koska rakennusprosessi ei hidastu ylimääräisten tarkistusten vuoksi.
Sama suositus löytyy myös @rsbuild/plugin-eslint-lisäosasta sekä Rsbuildin dokumentaatiosta, jossa kerrotaan, ettei ESLintiä suoriteta oletusarvoisesti rakennuksen aikana juuri suorituskykysyistä.
Rslint tarjoaa huomattavasti nopeamman vaihtoehdon
ESLintin rinnalle Rstack-tiimi on kehittänyt myös uuden Rslint-työkalun. Go-kielellä toteutettu Rslint on suunniteltu erityisesti TypeScript-projekteille, ja se hyödyntää typescript-go-teknologiaa. Kehittäjien mukaan linttaus voi olla jopa 20–40 kertaa nopeampaa kuin perinteisillä ESLint-asetuksilla.
Tämän vuoksi yhä useammat kehittäjät saattavat siirtyä käyttämään erillistä linttausprosessia sen sijaan, että tarkistukset suoritettaisiin jokaisen käännöksen yhteydessä.
Päivitys kannattaa testata huolellisesti
Version 4.x ohjelmiston käyttäjien kannattaa varmistaa, että oma kehitysympäristö tukee puhdasta ESM-rakennetta ennen päivitystä.
Samalla projektin ylläpitäjät suosittelevat siirtymistä ESLintin uuteen Flat Config -määritysmalliin käyttämällä asetusta configType: ‘flat’, sillä kyseinen konfiguraatiomuoto tulee olemaan jatkossa yhä keskeisemmässä roolissa ESLint-ekosysteemissä.
Lisätietoja ESM-siirtymästä löytyy myös Rspack 2.0 julkaisutiedoista. eslint-rspack-plugin on avoimen lähdekoodin projekti, joka julkaistaan MIT-lisenssillä ja on ladattavissa npm-paketinhallinnan kautta.