-
Notifications
You must be signed in to change notification settings - Fork 32
[Feature Request] Support for Expo Config Plugins #110
Description
I am on a team that's fixin to start work on a cross-platform Expo app, intended to replace our three legacy clients. Wanted to inquire whether y'all would consider adding support for Config Plugins, so this library can be used with the Expo Managed Workflow (i.e. without ejecting)
Thanks for your consideration!
Feature Context
Over the past several months Expo has introduced features which enable apps to use external native modules, without ejecting Expo's managed workflow.
The customizations to the iOS and Android code that are required by a given native module are automated, using an AST-based API that Expo provides through "Config Plugins" feature.
These automations (called "mods") are executed during a new "Prebuild" phase, in which boilerplate ios and android directories are created — and then their respective files are altered, based on the instructions in a given modules config plugin. The end result is essentially the same as if you ejected and manually changed the ios/android files.
Here's the Expo blog post announcing Config Plugins and the associated feature-set.
Overview of Proposed Implementation
The process for creating a Config Plugin is detailed here:
https://docs.expo.io/guides/config-plugins/#creating-a-plugin
There are a few different "recipes" for how to implement — but the gist of it is:
- Create the
app.plugin.jsfile, at the project root — which serves as a standard entrypoint where expo can resolve the plugin code. [ex:expo-camera] - Export a function prefixed using "with" (eg
withFeature) which accepts aconfigobject that can be used, along with@expo/config-pluginsmethods, to implement mods for each platform's native code. [ex:withCamera] - Add mods corresponding to the setup steps in your README.md
- Celebrate!
Additional Question
Are there specific feature in the RN SDK, that aren't supported in the standard React SDK? I've been trying to parse the docs a little bit but it's not totally clear to me. Thanks!