| #
6fb32ddd |
| 13-Jun-2023 |
Keith Kurak <[email protected]> |
[cli] Add dependency exclusion to `npx expo install` (#22736)
# Why
Fulfills
https://linear.app/expo/issue/ENG-8564/add-dependency-exclusion-to-npx-expo-install.
Developers will be able to suppre
[cli] Add dependency exclusion to `npx expo install` (#22736)
# Why
Fulfills
https://linear.app/expo/issue/ENG-8564/add-dependency-exclusion-to-npx-expo-install.
Developers will be able to suppress warnings from `npx expo install
--check` via a package.json config, and thus suppress doctor warnings
when they intentionally choose to install a different version,
especially when using dev builds and not needing to stick to the Expo
Go- bundled version.
# How
`npx expo install --check|fix` reads from `expo.install.exclude` if it's
available, and, if one of the packages it thinks it should fix is in
that list, it will skip asking/ fixing it. If you run `EXPO_DEBUG=1 npx
expo install --check`, the packages whose checks were actually skipped
will be listed in debug output; otherwise there are no warnings or
messages about the excluded packages.
The package.json configuration verbiage is intended to be similar to the
[autolinking
config](https://docs.expo.dev/modules/autolinking/#exclude).
~~It also seemed appropriate that `npx expo install` should behave
differently if you try to install an excluded package, so someone
doesn't come along and write over a version that another developer
determined was good and thus applied the override for. Currently, it
aborts if any of the packages are in the exclusion list. I could see
doing a warning and skipping the affected packages instead, but the
command outright failing is pretty hard to miss.~~
`npx expo install` now installs excluded packages with the latest
version, just like a package without a specified native version. It will
add a note describing what it's doing and why.
# Test Plan
- [x] test without `expo.install.exclude` (works the same)
- [x] test with empty exclusion list (works the same)
- [x] test with exclusions that aren't actual dependencies (works the
same)
- [x] test `expo install --fix|check` when excluding an actual
dependency (skips it)
- [x] test with `EXPO_DEBUG=1` (lists excluded packages)
- [x] test `expo install [package]` with exclusions (installs latest
with notes)
- [x] test `expo install [package]` without exclusions (proceeds as it
normally does)
## Output
`npx expo install --check`, showing note that it is skipping checking
packages in the exclude list:
<img width="884" alt="image"
src="https://github.com/expo/expo/assets/8053974/30cef729-af18-44cb-98ef-11fc9729ae3d">
Additional debug output for `EXPO_DEBUG=1 npx expo install --check`:
<img width="904" alt="image"
src="https://github.com/expo/expo/assets/8053974/9096a939-066c-431b-a467-6d3d70ef448d">
`expo install <package>` with exclusions:
<img width="932" alt="image"
src="https://github.com/expo/expo/assets/8053974/d51e9e5a-cc59-4aa4-9cb6-4a2294b01ccc">
# Checklist
<!--
Please check the appropriate items below if they apply to your diff.
This is required for changes to Expo modules.
-->
- [x] Documentation is up to date to reflect these changes (eg:
https://docs.expo.dev and README.md).
- [x] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
- [x] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
---------
Co-authored-by: Brent Vatne <[email protected]>
show more ...
|