De fleste store – og temmelig mange små – kodeprosjekter benytter mange tredjeparts biblioteker som installeres som «avhengigheter». Noe som ofte kan være fornuftig, siden det kan være både tidkrevende og lite produktivt å skulle finne opp hjulet på nytt hver gang.
Det å ukritisk bruke kode laget av andre kan imidlertid innebære en risiko for at ting slutter å fungere hvis det gjøres endringer i noen av avhengighetene man bruker. I tillegg til at det selvfølgelig også kan være en sikkerhetsrisiko å inkludere et stort antall avhengigheter du ikke vet hvordan fungerer.
For et par uker siden rapporterte flere brukere om at create-react-app – et populært verktøy for å raskt opprette en grunnleggende React-applikasjon – ikke lenger fungerte. Årsaken viste seg å være en liten endring i et bittelite Javascript-bibliotek med navnet is-promise. Alt is-promise gjør er å utføre en temmelig enkel og grunnleggende sjekk av om et Javascript-objekt er en «promise» og returnere enten true eller false.
I tillegg til create-react-app berørte feilen også en rekke andre store og små prosjekter, som Googles Angular-rammeverk og Firebase-verktøy. Feilen besto i at en ny versjon av is-promise ikke benyttet ES modules på riktig måte – slik at utviklere ikke fikk bygget nye versjoner av sine prosjekter når is-promise skulle importeres. Eksisterende prosjekter som benyttet is-promise feilet med andre ord ikke, men feilen lagde likevel problemer for mange utviklere.
ZDNet skriver at selv om is-promise består av få linjer med kode, er det en av de mest populære pakkene som installeres via pakkehåndteringssystemet npm. Ifølge Github brukes is-promise av mer enn 3,4 millioner prosjekter og brukes som avhengighet i 766 andre Javascript-biblioteker.
Ikke første gang – noen som husker «left-pad»?
Is-promise-biblioteket er så lite at det knapt kan kalles et bibliotek. Hele sjekken gjøres i praksis av kun én kodelinje, som man strengt tatt ikke skal ha veldig omfattende Javascript-kunnskap for å klare å implementere selv. Og klarer man det ikke selv, har is-promise MIT-lisens. Det betyr at du i praksis kan gjøre hva du vil med koden – som for eksempel å legge den inn i din egen kodebase i stedet for å dra den inn som en ekstern avhengighet.
Dette er hele koden, for de som måtte være nysgjerrige:
module.exports = isPromise; module.exports.default = isPromise; function isPromise(obj) { return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; }
Dette er ikke første gang endringer i svært enkle tredjeparts Javascript-biblioteker lager krøll for et stort antall utviklere verden over. I 2016 bestemte utvikleren av Javascript-biblioteket left-pad seg for å av-publisere biblioteket fra npm – uten forvarsel. Det gjorde at tusenvis av Javascript-prosjekter verden over plutselig sluttet å fungere.
Også left-pad var et svært enkelt bibliotek, med kun 17 kodelinjer. Alt det gjorde, var å legge til tallet null eller mellomrom før en tekststreng. Dette kan i dag gjøres enkelt med streng-metoden padStart().
Github får innebygget Visual Studio-basert IDE rett i nettleseren