I started a new mobile app project and since we have our own mobile components for reusability, we also use symlinking from the local component to the Expo app to make sure it’s being developed properly. We have successfully linked prior Expo apps using SDK 44
, but in this new project, we decided to use the most recent 46
. It seems when I update the metro.config
file the same as before, Expo crashes.
My laptop is an MacBook Pro with:
- 12.5.1 (Monterey)
- 2.4 GHz 8-Core Intel Core i9
- 64 GB 2667 MHz DDR4
I have tried this in multiple repos, as well as my co-worker seeing the same issue.
I have also uninstalled Xcode & re-installed with the same outcome.
What platform(s) does this occur on?
iOS
SDK Version
^46.0.8
Environment
expo-env-info 1.0.5 environment info:
System:
OS: macOS 12.5.1
Shell: 5.8.1 - /bin/zsh
Binaries:
Node: 16.15.0 - ~/.nvm/versions/node/v16.15.0/bin/node
Yarn: 1.22.5 - ~/.yarn/bin/yarn
npm: 8.5.5 - ~/.nvm/versions/node/v16.15.0/bin/npm
Managers:
CocoaPods: 1.10.1 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 21.4, iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 8.5
IDEs:
Android Studio: 2021.2 AI-212.5712.43.2112.8512546
Xcode: 13.3/13E113 - /usr/bin/xcodebuild
npmPackages:
expo: ^46.0.8 => 46.0.8
react: 18.0.0 => 18.0.0
react-dom: 18.0.0 => 18.0.0
react-native: ^0.69.4 => 0.69.4
react-native-web: ~0.18.7 => 0.18.7
npmGlobalPackages:
expo-cli: 6.0.5
Expo Workflow: managed
default metro.config
const { getDefaultConfig } = require('expo/metro-config');
const path = require('path');
// const workspaceRoot = path.resolve(__dirname, '../myComponentLib'); // this gets uncommented when using a link
const defaultConfig = getDefaultConfig(__dirname);
defaultConfig.transformer.babelTransformerPath = require.resolve(
'react-native-svg-transformer',
);
const assetExts = defaultConfig.resolver.assetExts;
const sourceExts = defaultConfig.resolver.sourceExts;
defaultConfig.resolver = {
assetExts: assetExts.filter((ext) => ext !== 'svg'),
sourceExts: [...sourceExts, 'svg'],
};
defaultConfig.resolver.nodeModulesPaths = [
path.resolve(__dirname, 'node_modules'),
// path.resolve(workspaceRoot, 'packages/mobile/node_modules'), // this gets uncommented when using a link
];
// defaultConfig.watchFolders = [path.resolve(workspaceRoot)]; // this gets uncommented when using a link
module.exports = defaultConfig;
I am curious, is there a difference in linking between the different SDKs now?