npm 上的包可以在其 package.json 中定义_生命周期脚本_。下面列出了一些最常见的脚本,但还有 许多其他脚本。
preinstall:在包安装之前运行postinstall:在包安装之后运行preuninstall:在包卸载之前运行prepublishOnly:在包发布之前运行
这些脚本是任意的 shell 命令,包管理器应该在适当的时候读取并执行它们。但是执行任意脚本代表潜在的安全风险,因此与其他 npm 客户端不同,Bun 默认不执行任意的生命周期脚本。
postinstall
postinstall 脚本特别重要。它被广泛用于构建或安装特定平台的二进制文件,用于实现为 原生 Node.js 插件 的包。例如,node-sass 是一个流行的包,它使用 postinstall 来构建 Sass 的原生二进制文件。
json
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"node-sass": "^6.0.1"
}
}trustedDependencies
Bun 不使用执行任意脚本的方法,而是采用"默认安全"的方法。你可以将某些包添加到允许列表中,Bun 将为这些包执行生命周期脚本。要告诉 Bun 允许特定包的生命周期脚本,请将包名称添加到 package.json 中的 trustedDependencies 数组。
json
{
"name": "my-app",
"version": "1.0.0",
"trustedDependencies": ["node-sass"]
}一旦添加到 trustedDependencies,安装/重新安装包。Bun 将读取此字段并为 my-trusted-package 运行生命周期脚本。
默认情况下,允许前 500 个具有生命周期脚本的 npm 包。你可以 在此处 查看完整列表。
--ignore-scripts
要为所有包禁用生命周期脚本,请使用 --ignore-scripts 标志。
bash
bun install --ignore-scripts