构建生命周期钩子

编辑页面

了解如何使用 EAS Build 生命周期钩子与 npm 来自定义你的构建流程。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

EAS Build 生命周期 npm 钩子允许你通过在构建过程之前或之后运行脚本来自定义构建流程。

要更好地理解,请参阅 Android 构建过程iOS 构建过程

警告自定义构建 中,生命周期钩子不会被构建过程执行。它们需要在过程中由构建步骤手动提取并调用。

EAS Build 生命周期钩子

共有六个可用的 EAS Build 生命周期 npm 钩子。要使用它们,你可以在 package.json 中进行设置。

Build Lifecycle npm hook描述
eas-build-pre-install在 EAS Build 运行 npm install 之前执行。
eas-build-post-install行为取决于平台和项目类型。

对于 Android,在以下命令全部完成后执行一次:npm installnpx expo prebuild(如有需要)。

对于 iOS,在以下命令全部完成后执行一次:npm installnpx expo prebuild(如有需要)以及 pod install
eas-build-on-success如果构建成功,此钩子会在构建过程结束时触发。
eas-build-on-error如果构建失败,此钩子会在构建过程结束时触发。
eas-build-on-complete此钩子会在构建过程结束时触发。你可以使用 EAS_BUILD_STATUS 环境变量检查构建状态。它的值要么是 finished,要么是 errored
eas-build-on-cancel如果构建被取消,此钩子会触发。

下面是使用一个或多个生命周期钩子时,package.json 的示例:

package.json
{ "name": "my-app", "scripts": { "eas-build-pre-install": "echo 123", "eas-build-post-install": "echo 456", "eas-build-on-success": "echo 789", "eas-build-on-error": "echo 012", "eas-build-on-cancel": "echo 345", "start": "expo start", "test": "jest" }, "dependencies": { "expo": "55.0.0" %%placeholder-start%%... %%placeholder-end%% } }

平台相关的钩子行为

要仅为 Android 或 iOS 构建运行脚本(或脚本的一部分),你可以在脚本中根据平台分支处理。请参阅以下常见示例,通过 shell 脚本或 Node 脚本来实现这一点。

示例

package.json 和 shell 脚本

package.json
{ "name": "my-app", "scripts": { "eas-build-pre-install": "./pre-install", "start": "expo start" %%placeholder-start%%... %%placeholder-end%% }, "dependencies": { %%placeholder-start%%... %%placeholder-end%% } }
pre-install
#!/bin/bash # 这是项目根目录中名为 "pre-install" 的文件 if [[ "$EAS_BUILD_PLATFORM" == "android" ]]; then echo "在这里运行 Android 构建的命令" elif [[ "$EAS_BUILD_PLATFORM" == "ios" ]]; then echo "在这里运行 iOS 构建的命令" fi
示例:在 macOS worker 上安装 git-lfs 的预安装脚本

下面的脚本会在尚未安装 git-lfs 时进行安装。这在某些需要 git-lfs 来安装特定 CocoaPods 的情况下很有用。

pre-install
if [[ "$EAS_BUILD_PLATFORM" == "ios" ]]; then if brew list git-lfs > /dev/null 2>&1; then echo "=====> git-lfs 已安装。" else echo "=====> 正在安装 git-lfs" HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs git lfs install fi fi

package.json 和 Node 脚本

package.json
{ "name": "my-app", "scripts": { "eas-build-pre-install": "node pre-install.js", "start": "expo start" // ... }, "dependencies": { // ... } }
pre-install.js
// 在项目根目录创建一个名为 "pre-install.js" 的文件 if (process.env.EAS_BUILD_PLATFORM === 'android') { console.log('在这里运行 Android 构建的命令'); } else if (process.env.EAS_BUILD_PLATFORM === 'ios') { console.log('在这里运行 iOS 构建的命令'); }