This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

使用 Bun

编辑页面

关于在 Expo 和 EAS 中使用 Bun 的指南。


Bun 是一个 JavaScript 运行时,也是 Node.js 的直接替代品。在 Expo 项目中,Bun 可用于安装 npm 包并运行 Node.js 脚本。使用 Bun 的好处包括:比 npm、pnpm 或 Yarn 更快的包安装速度,以及至少比 Node.js 快 4 倍的启动时间,这会极大提升你的本地开发体验。

Prerequisites

2 requirements

1.

机器上已安装 Bun

安装 Bun 以创建新应用。

2.

Node.js(LTS)

bun create expobun expo prebuild 命令仍然需要一个 Node.js(LTS)版本,它们使用 npm pack 来下载项目模板。

使用 Bun 启动一个新的 Expo 项目

要创建一个新项目,运行以下命令:

Terminal
bun create expo-app my-app

你也可以使用 bun run 运行任何 package.json 脚本:

Terminal
bun run ios

要安装任何 Expo 库,你可以使用 bun expo install

Terminal
bun expo install expo-audio

在 EAS 构建中使用 Bun

EAS 会根据你代码库中的锁文件来决定使用哪个包管理器。如果你希望 EAS 使用 Bun,请在你的代码库中运行 bun install。这会创建一个 Bun 锁文件:在 Bun 1.2 及更新版本中为 bun.lock,而在使用较旧版本 Bun 时为 bun.lockb。只要你的代码库中存在其中任意一个锁文件,Bun 就会被用作构建的包管理器。请确保删除由其他包管理器生成的任何锁文件。

在 EAS 上自定义 Bun 版本

使用 EAS 时,Bun 会默认安装。请参阅 Android 服务器镜像iOS 服务器镜像,了解你的构建镜像使用的是哪个 Bun 版本。

要在 EAS 中使用 Bun 的精确版本,请在 eas.json 中构建配置的 build profile 下添加版本号。例如,下面的配置为 development 构建配置指定了 Bun 版本 1.0.0

eas.json
{ "build": { "development": { "bun": "1.0.0" %%placeholder-start%%... %%placeholder-end%% } %%placeholder-start%%... %%placeholder-end%% } }

受信任的依赖项

与其他包管理器不同,Bun 不会自动执行已安装库中的生命周期脚本,因为这被认为存在安全风险。不过,如果你安装的某个包有一个你希望运行的 postinstall 脚本,你必须在你的 package.json 中的 trustedDependencies 数组里显式声明该库。

例如,如果你安装了 packageA,它依赖于 packageB,而 packageB 有一个 postinstall 脚本,那么你必须在 trustedDependencies 中添加 packageB

要在你的 package.json 中添加受信任的依赖项,请添加:

package.json
"trustedDependencies": ["your-dependency"]

然后,删除你的 lockfile 并重新安装依赖项:

Terminal
rm -rf node_modules
rm bun.lock bun.lockb
bun install

常见错误

在使用 Sentry 和 Bun 时 EAS Build 失败

如果你正在使用 sentry-expo@sentry/react-native,它们依赖于 @sentry/cli,后者会在构建期间将 source maps 上传到 Sentry。@sentry/cli 包有一个 postinstall 脚本,需要运行它,“上传 source maps”脚本才会可用。

要解决此问题,请将 @sentry/cli 添加到 package.json 中的可信依赖项数组:

package.json
"trustedDependencies": ["@sentry/cli"]