🤔 What Happened
Expo has historically exported several APIs on the global
Expo objects in order to make it easier for libraries to interoperate between Expo managed environments and bare React Native projects.
All of these APIs have since been extracted from the
expo package itself and other techniques are available to solve the problem that the globals were intended to solve.
Global exports will be removed in SDK 41.
If you are an app developer and you just want to find out how to get rid of this warning, you should first determine if you are using the global object directly in your own codebase, and if not then it is likely from one of your dependencies.
If it's in your own codebase, then install the corresponding package and import from it instead of using the global. For example, for
Constants (expo-constants) you would run
expo install expo-constants and then change
import Constants from 'expo-constants';.
If it's not in your own codebase, then you can search your
node_modules directory for
__expo.[API_NAME] - for example
__expo.Icon, and also
Expo.[API_NAME]. You can then check if the library has updated to remove the dependency on the global, or use patch-package to patch the issue directly in your
node_modules and open an issue or pull request to resolve it. If you don't have time and you just want to ignore the warning, use
LogBox.ignoreLogs(...) from react-native.
If you are a library author, you can provide functionality that only runs in the Expo managed workflow by using an
.expo.[js|ts|tsx] file, similar to this example. Alternatively, you can have consumers of your library inject the dependency that, similar to this example.