Expo is an open-source framework for apps that run natively on Android, iOS, and the web. Expo brings together the best of mobile and the web and enables many important features for building and scaling an app.
Expo is a set of tools built on top of React Native. The Nx Plugin for Expo contains generators for managing Expo applications and libraries within an Nx workspace.
Setting Up Expo
Section titled “Setting Up Expo”To create a new workspace with Expo, run the following command:
npx create-nx-workspace@latest --preset=expo --appName=your-app-name
Installation
Section titled “Installation”In any Nx workspace, you can install @nx/expo
by running the following command:
nx add @nx/expo
This will install the correct version of @nx/expo
.
How @nx/expo Infers Tasks
Section titled “How @nx/expo Infers Tasks”The @nx/expo
plugin will create a task for any project that has an app configuration file present. Any of the following files will be recognized as an app configuration file:
app.config.js
app.json
In the app config file, it needs to have key expo
:
{ "expo": { "name": "MyProject", "slug": "my-project" }}
View Inferred Tasks
Section titled “View Inferred Tasks”To view inferred tasks for a project, open the project details view in Nx Console or run nx show project my-project --web
in the command line.
@nx/expo Configuration
Section titled “@nx/expo Configuration”The @nx/expo/plugin
is configured in the plugins
array in nx.json
.
{ "plugins": [ { "plugin": "@nx/expo/plugin", "options": { "startTargetName": "start", "serveTargetName": "serve", "runIosTargetName": "run-ios", "runAndroidTargetName": "run-android", "exportTargetName": "export", "prebuildTargetName": "prebuild", "installTargetName": "install", "buildTargetName": "build", "submitTargetName": "submit" } } ]}
Once a Expo configuration file has been identified, the targets are created with the name you specify under startTargetName
, serveTargetName
, runIosTargetName
, runAndroidTargetname
, exportTargetName
, prebuildTargetName
, installTargetName
, buildTargetName
or submitTargetName
in the nx.json
plugins
array. The default names for the inferred targets are start
, serve
, run-ios
, run-anroid
, export
, prebuild
, install
, build
and submit
.
Creating Applications
Section titled “Creating Applications”Add a new application to your workspace with the following command:
nx g @nx/expo:app apps/my-app
Start the application by running:
nx start my-app
Generating Libraries
Section titled “Generating Libraries”To generate a new library run:
npx nx g @nx/expo:lib libs/your-lib-name
Generating Components
Section titled “Generating Components”To generate a new component inside library run:
npx nx g @nx/expo:component libs/your-lib-name/src/your-component-name --export
Replace your-lib-name
with the app's name as defined in your tsconfig.base.json
file or the name
property of your package.json
Using Expo
Section titled “Using Expo”Start a Development Server
Section titled “Start a Development Server”You can start a development server by running:
nx start <app-name>
Compile App Locally
Section titled “Compile App Locally”You can compile your app locally with run-ios
and run-android
commands:
Compile for iOS:
nx run-ios <app-name>
Compile for Android:
nx run-android <app-name>
To run these commands, you need to have your development environment setup. To run an iOS app,it can only be run on a Mac, and Xcode must be installed. Similarly, to run an Android app, it requires Android Studio and Java to be installed and configured on your computer. Setup steps: https://reactnative.dev/docs/environment-setup.
Compile Web Assets
Section titled “Compile Web Assets”You can build your JavaScript bundle using Metro bundler by running:
nx export <app-name>
Compile for all platforms:
nx export <app-name> --platform=all
Compile for iOS:
nx export <app-name> --platform=ios
Compile for Android:
nx export <app-name> --platform=android
Compile for Web:
nx export <app-name> --platform=web
Generate Native Code
Section titled “Generate Native Code”To generate native code, run:
nx prebuild <app-name>
Generate for all platforms:
nx prebuild <app-name> --platform=all
Generate for iOS:
nx prebuild <app-name> --platform=ios
Generate for Android:
nx prebuild <app-name> --platform=android
Install Compatible NPM Packages
Section titled “Install Compatible NPM Packages”To install packages that is compatible with current version of Expo, run:
nx install <app-name>
Unlike npm's install
command, this install
command will install the exact right version for currently installed copy of Expo.
To install a specify NPM package, run:
nx install <app-name> --packages=<packpage-name>nx install <app-name> --packages=<packpage-name-1>,<packpage-name-2>,<packpage-name-3>
To check and fix package versions, run:
Check which packages needed to be updated:
nx install <app-name> --check
Automatically update invalid packages versions:
nx install <app-name> --fix
Run an EAS Build
Section titled “Run an EAS Build”Expo Application Services (EAS) are deeply integrated cloud services for Expo and React Native apps. EAS Build is a hosted service for building app binaries for your Expo and React Native projects.
To run an EAS build:
nx build <app-name>
If you are not signed into an EAS account, run the following command to log in:
npx eas login
To check the details of your build status, run:
nx build-list <app-name>
Submit an EAS Build
Section titled “Submit an EAS Build”EAS Submit is a hosted service for uploading and submitting your app binaries to the app stores. Since it's a hosted service, you can submit your app to both stores as long as you can run EAS CLI on your machine.
To submit an EAS build:
nx submit <app-name>
Update an EAS Build
Section titled “Update an EAS Build”EAS Update is a hosted service that serves updates for projects using the expo-updates
library.
EAS Update makes fixing small bugs and pushing quick fixes a snap in between app store submissions. It accomplishes this by allowing an end-user's app to swap out the non-native parts of their app (for example, JS, styling, and image changes) with a new update that contains bug fixes and other updates.
To update an EAS build:
nx update <app-name>
Testing Projects
Section titled “Testing Projects”You can run unit tests with:
nx test <project-name>
Expo Commands
Section titled “Expo Commands”Below table is a map between expo commands and Nx commands:
Expo Commands | Nx Commands |
---|---|
expo start | nx start <app-name> |
expo run:ios | nx run-ios <app-name> |
expo run:android | nx run-android <app-name> |
expo export | nx export <app-name> |
expo prebuild | nx prebuild <app-name> |
expo install | nx install <app-name> |
eas build | nx build <app-name> |
eas build:list | nx build-list <app-name> |
eas update | nx update <app-name> |
eas submit | nx submit <app-name> |