Edit this page
Learn how to use the EAS Build lifecycle hooks with npm to customize your build process.
Edit this page
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 and the iOS build process.
The lifecycle hooks are not executed by the build process in custom builds. They need to be manually extracted and called by the build steps during the process.
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. For Android, runs once after the following commands have all completed: npm install and npx expo prebuild (if needed).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:
{
"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"
%%placeholder-start%%... %%placeholder-end%%
}
}
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.
{
"name": "my-app",
"scripts": {
"eas-build-pre-install": "./pre-install",
"start": "expo start"
%%placeholder-start%%... %%placeholder-end%%
},
"dependencies": {
%%placeholder-start%%... %%placeholder-end%%
}
}
#!/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
git-lfs
on macOS workersThe following script installs git-lfs
if it is not yet installed. This is useful in some cases where git-lfs
is required to install certain CocoaPods.
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
{
"name": "my-app",
"scripts": {
"eas-build-pre-install": "node pre-install.js",
"start": "expo start"
// ...
},
"dependencies": {
// ...
}
}
// 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');
}