npm 上的软件包可以在其 package.json 中定义_生命周期脚本_。以下是其中一些最常见的脚本,还有许多其他脚本:
preinstall:包安装前运行postinstall:包安装后运行preuninstall:包卸载前运行prepublishOnly:包发布前运行
npm 客户端不同,Bun 默认不会执行任意生命周期脚本。
postinstall
postinstall 脚本非常重要。它广泛用于为以 Node.js 原生插件 实现的软件包构建或安装特定于平台的二进制文件。例如,node-sass 使用 postinstall 为 Sass 构建原生二进制文件。
package.json
trustedDependencies
Bun 采用“默认安全”策略:它只会为允许列表中的包运行生命周期脚本。要允许某个特定包的生命周期脚本,请将其名称添加到 package.json 中的 trustedDependencies 数组。
package.json
trustedDependencies 后,安装或重新安装该包。Bun 会读取此字段并运行其生命周期脚本。
默认情况下,系统允许一个精选的、包含生命周期脚本的常用 npm 包列表。请参阅完整列表。
默认信任的依赖列表仅适用于从 npm 安装的包。对于来自其他来源的包(例如
file:、link:、git: 或 github: 依赖),即使包名匹配默认列表中的条目,也必须显式将其添加到 trustedDependencies 中才能运行它们的生命周期脚本。这样可以防止恶意包通过本地文件路径或 git 仓库伪装成受信任包。trustedDependencies 字段的行为
在 package.json 中定义 trustedDependencies 会替换默认列表,而不是在其基础上扩展。每个项目只会应用以下三种模式中的一种:
当你想完全放弃默认允许列表,而又不想在每次安装时都传入
--ignore-scripts,可以设置 trustedDependencies: []。如果你定义了显式的 trustedDependencies 列表,请把你仍然需要其生命周期脚本的默认列表中的包也一并包含进去(例如 sharp 或 esbuild)——它们将不再被隐式信任。
--ignore-scripts
如果想禁用所有包的生命周期脚本,可以使用 --ignore-scripts 参数。
terminal
bunfig.toml 中设置 install.ignoreScripts:
bunfig.toml
.npmrc 中:
.npmrc