Pakete auf npm können Lifecycle-Skripte in ihrer package.json definieren. Einige der häufigsten sind unten aufgeführt, aber es gibt viele andere.
preinstall: Wird ausgeführt, bevor das Paket installiert wirdpostinstall: Wird ausgeführt, nachdem das Paket installiert wurdepreuninstall: Wird ausgeführt, bevor das Paket deinstalliert wirdprepublishOnly: Wird ausgeführt, bevor das Paket veröffentlicht wird
Diese Skripte sind beliebige Shell-Befehle, die der Paketmanager zum geeigneten Zeitpunkt lesen und ausführen soll. Das Ausführen beliebiger Skripte stellt jedoch ein potenzielles Sicherheitsrisiko dar, daher führt Bun — im Gegensatz zu anderen npm-Clients — nicht standardmäßig beliebige Lifecycle-Skripte aus.
postinstall
Das postinstall-Skript ist besonders wichtig. Es wird häufig verwendet, um plattformspezifische Binärdateien für Pakete zu bauen oder zu installieren, die als native Node.js-Addons implementiert sind. Zum Beispiel verwendet node-sass, ein beliebtes Paket, postinstall, um eine native Binärdatei für Sass zu bauen.
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"node-sass": "^6.0.1"
}
}trustedDependencies
Anstatt beliebige Skripte auszuführen, verwendet Bun einen "standardmäßig sicheren" Ansatz. Sie können bestimmte Pakete zu einer Allowlist hinzufügen, und Bun führt Lifecycle-Skripte für diese Pakete aus. Um Bun mitzuteilen, dass es Lifecycle-Skripte für ein bestimmtes Paket zulassen soll, fügen Sie den Paketnamen zum trustedDependencies-Array in Ihrer package.json hinzu.
{
"name": "my-app",
"version": "1.0.0",
"trustedDependencies": ["node-sass"]
}Sobald es zu trustedDependencies hinzugefügt wurde, installieren/erneut installieren Sie das Paket. Bun liest dieses Feld und führt Lifecycle-Skripte für my-trusted-package aus.
Die Top 500 npm-Pakete mit Lifecycle-Skripten sind standardmäßig erlaubt. Sie können die vollständige Liste hier einsehen.
--ignore-scripts
Um Lifecycle-Skripte für alle Pakete zu deaktivieren, verwenden Sie das --ignore-scripts-Flag.
bun install --ignore-scripts