Utvikling

Endring i Javascript-pakke med én kodelinje fikk konsekvenser for millioner av prosjekter verden over

Ikke første gang det skjer.

Liten tue kan velte stort lass: Endringer i eksterne avhengigheter har flere ganger skapt store konsekvenser for utviklere verden over.
Liten tue kan velte stort lass: Endringer i eksterne avhengigheter har flere ganger skapt store konsekvenser for utviklere verden over. Foto: Charles Deluvio on Unsplash
8. mai 2020 - 14:14

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-sjef Nat Friedman hadde en rekke spennende nyheter å komme med da han åpnet årets virtuelle Github Satellite-konferanse.
Les også:

Github får innebygget Visual Studio-basert IDE rett i nettleseren

Kommentarer:
Du kan kommentere under fullt navn eller med kallenavn. Bruk BankID for automatisk oppretting av brukerkonto.
Se flere jobber
Tre jobbtilbud 10 måneder før masteravslutning!
Les mer
Tre jobbtilbud 10 måneder før masteravslutning!
Få annonsen din her og nå frem til de beste kandidatene
Lag en bedriftsprofil
En tjeneste fra