I’m a bit confused about the relationship between using the local cli and using the global one. Two kinds of confusion actually:
When there’s a command that both support like install what’s the difference between running the local (with yarn expo install) and the global (with expo or expo-cli)?
When the only way to run a command is to run global, what’s going on? E.g., does expo doctor still work as it always did?
All in all I’m not at all clear why there are now sometimes two ways of doing what looks like the same thing, and sometimes no way (without going global), or why it’s so easy to accidentally go global when that’s not what’s intended (e.g. forgetting to prepend yarn to expo).
The Local CLI is the new CLI that comes pre-packaged when Expo SDK is used in a new project (starting from SDK 46). We are currently moving away from Global CLI in favor of local CLI. This means that the npx expo command can be used in any React Native project that includes Expo SDK (for example, with custom development clients too).
Yes, there are some options like doctor that still use Global CLI but in the local CLI you will find the option to validate version and fix using --check and --fix options. Here is the documentation for that: https://docs.expo.dev/workflow/expo-cli/#version-validation
The --check option now also enables to check version incompatibility for specific packages included in a project.