Skip to main content
Glama
npm-hooks.md6.13 kB
--- title: Build lifecycle hooks description: Learn how to use the EAS Build lifecycle hooks with npm to customize your build process. maxHeadingDepth: 4 --- EAS Build lifecycle npm hooks allows you to customize your build process by running scripts before or after the build process. > For better understanding, see the [Android build process](/build-reference/android-builds/) and the [iOS build process](/build-reference/ios-builds/). > **warning** The lifecycle hooks are not executed by the build process in [custom builds](/custom-builds/get-started/). They need to be manually extracted and called by the build steps during the process. ## EAS Build lifecycle hooks There are six EAS Build lifecycle npm hooks available. To use, them, you can set them in your **package.json**. | Build Lifecycle npm hook | Description | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `eas-build-pre-install` | Executed before EAS Build runs `npm install`. | | `eas-build-post-install` | The behavior depends on the platform and project type. <br/> <br/> For Android, runs once after the following commands have all completed: `npm install` and `npx expo prebuild` (if needed).<br/><br/> For iOS, runs once after the following commands have all completed: `npm install`, `npx expo prebuild` (if needed), and `pod install`. | | `eas-build-on-success` | This hook is triggered at the end of the build process if the build was successful. | | `eas-build-on-error` | This hook is triggered at the end of the build process if the build failed. | | `eas-build-on-complete` | This hook is triggered at the end of the build process. You can check the build's status with the `EAS_BUILD_STATUS` environment variable. It's either `finished` or `errored`. | | `eas-build-on-cancel` | This hook is triggered if the build is canceled. | An example of how a **package.json** can look when using one or more lifecycle hooks: ```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": "51.0.0" /* @hide ... */ /* @end */ } } ``` ## Platform-specific hook behavior To run a script (or some part of a script) only for Android or iOS builds, you can fork the behavior depending on the platform within the script. See the following common examples to do this through a shell script or a Node script. ### Examples #### package.json and shell script ```json package.json { "name": "my-app", "scripts": { "eas-build-pre-install": "./pre-install", "start": "expo start" /* @hide ... */ /* @end */ }, "dependencies": { /* @hide ... */ /* @end */ } } ``` ```bash pre-install #!/bin/bash # This is a file called "pre-install" in the root of the project if [[ "$EAS_BUILD_PLATFORM" == "android" ]]; then echo "Run commands for Android builds here" elif [[ "$EAS_BUILD_PLATFORM" == "ios" ]]; then echo "Run commands for iOS builds here" fi ``` Example: Pre-install script that installs <CODE>git-lfs</CODE> on macOS workers</>}> The following script installs [`git-lfs`](https://git-lfs.com/) if it is not yet installed. This is useful in some cases where `git-lfs` is required to install certain CocoaPods. ```bash pre-install if [[ "$EAS_BUILD_PLATFORM" == "ios" ]]; then if brew list git-lfs > /dev/null 2>&1; then echo "=====> git-lfs is already installed." else echo "=====> Installing git-lfs" HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs git lfs install fi fi ``` #### package.json and Node script ```json package.json { "name": "my-app", "scripts": { "eas-build-pre-install": "node pre-install.js", "start": "expo start" // ... }, "dependencies": { // ... } } ``` ```js pre-install.js // Create a file called "pre-install.js" at the root of the project if (process.env.EAS_BUILD_PLATFORM === 'android') { console.log('Run commands for Android builds here'); } else if (process.env.EAS_BUILD_PLATFORM === 'ios') { console.log('Run commands for iOS builds here'); } ```

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaksm/expo-docs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server