Bun

生命周期脚本

npm 上的包可以在其 package.json 中定义生命周期脚本。以下是一些最常见的脚本,但还有许多其他脚本

  • preinstall: 在安装包之前运行
  • postinstall: 在安装包之后运行
  • preuninstall: 在卸载包之前运行
  • prepublishOnly: 在发布包之前运行

这些脚本是任意 shell 命令,包管理器应在适当的时候读取和执行。但是,执行任意脚本存在潜在的安全风险,因此与其他 npm 客户端不同,Bun 默认情况下不执行任意生命周期脚本。

postinstall

postinstall 脚本尤为重要。它广泛用于为以原生 Node.js 插件形式实现的包构建或安装特定于平台的二进制文件。例如,node-sass 是一个流行的包,它使用 postinstall 来构建 Sass 的原生二进制文件。

{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "node-sass": "^6.0.1"
  }
}

trustedDependencies

Bun 没有执行任意脚本,而是使用“默认安全”方法。您可以将某些包添加到允许列表,Bun 将为这些包执行生命周期脚本。要告知 Bun 允许特定包的生命周期脚本,请将包名称添加到 package.json 中的 trustedDependencies 数组中。

{
  "name": "my-app",
  "version": "1.0.0",
  "trustedDependencies": ["node-sass"]
}

添加到 trustedDependencies 后,安装/重新安装包。Bun 将读取此字段并为 my-trusted-package 运行生命周期脚本。

截至 Bun v1.0.16,默认情况下允许使用生命周期脚本的前 500 个 npm 包。您可以在此处查看完整列表。

--ignore-scripts

要禁用所有包的生命周期脚本,请使用 --ignore-scripts 标志。

bun install --ignore-scripts