npm 12 blokkerer install-skript som standard, og du må godkjenne hvert unntak
Slå på godkjenning av install-skript før du oppgraderer til npm 12, ellers stopper de native byggesteget i CI-en din.
pnpm har tilbudt allowlisting av install-skript i årevis, og npm er den siste av de store pakkeforvalterne som slår dem av. Fra versjon 12 kjører ikke preinstall, install og postinstall fra avhengigheter med mindre pakken er godkjent eksplisitt, skriver InfoQ. Endringene ble varslet i juni og har ligget bak advarsler siden npm 11.16.0.
allowScripts favner videre enn mange tror: den gjelder også implisitte node-gyp-bygg for enhver pakke med en binding.gyp-fil, selv der ingen install-skript er deklarert. Du godkjenner det du stoler på med npm approve-scripts og committer allowlisten i package.json. To andre standarder rammer kilder utenfor registeret. allow-git er satt til none, som lukker en kjørevei der en Git-avhengighets egen .npmrc kunne overstyre Git-binæren selv med ignore-scripts satt, og allow-remote er også none, som blokkerer tarball-avhengigheter over https.
«Postinstall-skript burde vært fjernet for lenge siden, det er kreften i npm-pakker.» — atraac, i Hacker News-tråden
Motstanden handler mindre om prinsippet enn om slitasjen. En analytiker på OpenSourceMalware peker på at esbuild, sharp, core-js, puppeteer og bcrypt alle er avhengige av lifecycle-skript, og advarer om at gjentatte ødelagte bygg gjør nekt-som-standard til «en klikk-gjennom-dialog». JFrog oppgir at de tre vektorene var involvert i rundt 53 prosent av de ondsinnede npm-angrepene selskapet observerte det siste året.
Fellene ligger i det du allerede har konfigurert. En eksisterende ignore-scripts=true har forrang og slår stille ut allowlisten, og npm approve-scripts leser fra node_modules og feiler med ENOMATCH hvis pakken ikke er installert ennå. Globale installasjoner og npx kan ikke bruke kommandoen i det hele tatt, og trenger npm config set allow-scripts=canvas,sharp --location=user i stedet.
Hva bør du gjøre?
- Godkjenn først det som allerede ligger i avhengighetstreet, og stram inn etterpå. Det er rekkefølgen GitHub anbefaler i migreringsdiskusjonen.
- Let opp ignore-scripts=true i .npmrc-filene dine. Den har forrang og gjør allowlisten virkningsløs uten å si fra.
- Kjør et fullt bygg av prosjektene som bruker native moduler, Cypress, Playwright, Puppeteer, Electron eller Husky. Det er der byggene ryker.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.