expo-modules-core

SDK 48 all platforms.
When I add a new expo library such as expo-image, I now seem to always get the error

WARN  The native view manager required by name (ExpoImage) from NativeViewManagerAdapter isn't exported by expo-modules-core. Views of this type may not render correctly. Exported view managers: [ExpoBlurView, ExpoLinearGradient].
 ERROR  Error: Cannot find native module 'ExpoImage', js engine: hermes

This implies to me that I need to run a new build, and run a full app store submission.
I am used to only having to build/submit when a lib requires I add a build plugin.

Why is this? Is it something about hermes? I would really like to be able to add libs like expo-image without having to rebuild/resubmit, or I would like a clear warning that a given lib requires this.

correct, you need to run a new build when you add native code.

the hermes message is because react-native always appends the js engine to the message. i suspect this will go away soon as everyone is starting to use hermes

It used to be that native code was only added through build plugins, I guess this has changed and I missed the indication of that.

The value of knowing that a given expo-lib requires new native code was this:
I go to start a new project and try to include all the libraries that I will reasonably need, so that I have to re-build/submit as little as possible … I know I need to include some libs in my boilerplate because they require config plugins, so it is obvious. Now there is no indication if they will require native code or not … this is not good DX.

Can we start a ticket to fix this? expo-xxx libs should indicate if they include new native code within the docs.

hi there! this wasn’t actually the case. all libraries in the expo sdk include native code, with very few exceptions (the only one I can think of off of the top of my head is expo-checkbox). it does seem worth including in documentation whether a library requires you to rebuild though!

It’s an unfortunate downside of the EAS build system, but it’s far outweighed by the benefits.

With the classic build system the entire Expo SDK was always built-in to your app. This meant that you did not have to eject to e.g. use the Face Detector. Unfortunately, it also meant that Expo apps were all bloated with stuff you probably didn’t need (like the face detector). Also, your app included advertising/tracking code (even if you didn’t call that code) that you also might not have needed which made the app review process harder.

App size used to be one of the biggest complaints about Expo.

Another big issue with the old build system, of course, was that you had to eject if you wanted to include any third party native code.

So EAS Build fixed those problems by building in only your dependencies (smaller app) and all of your dependencies (so you can include third party native code, but of course you might need config plugins). But unfortunately it means that adding e.g. expo-image is basically the same as adding a third party native dependency. The only difference is it’s maintained by Expo and it’s included in Expo Go.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.