使用 Bun
编辑页面
关于在 Expo 和 EAS 中使用 Bun 的指南。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
Bun 是一个 JavaScript 运行时,也是 Node.js 的直接替代品。在 Expo 项目中,Bun 可用于安装 npm 包并运行 Node.js 脚本。使用 Bun 的好处包括:比 npm、pnpm 或 Yarn 更快的包安装速度,以及至少比 Node.js 快 4 倍的启动时间,这会极大提升你的本地开发体验。
前提条件
注意: 虽然在你的项目中,Bun 在大多数用例下都能替代 Node.js,但目前
bun create expo和bun expo prebuild命令仍然需要安装一个 Node.js LTS 版本。这些命令使用npm pack来下载项目模板。
要使用 Bun 创建一个新应用,请先在你的本地机器上安装 Bun。
使用 Bun 启动一个新的 Expo 项目
要创建一个新项目,运行以下命令:
- bun create expo-app my-app你也可以使用 bun run 运行任何 package.json 脚本:
- bun run ios要安装任何 Expo 库,你可以使用 bun expo install:
- 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:
{ "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 中添加受信任的依赖项,请添加:
"trustedDependencies": ["your-dependency"]
然后,删除你的 lockfile 并重新安装依赖项:
- 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 中的 受信任的依赖项 数组中:
"trustedDependencies": ["@sentry/cli"]