diff --git a/example/metro.config.js b/example/metro.config.js index ad337ad..24bc36f 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -3,26 +3,49 @@ const { getDefaultConfig } = require("expo/metro-config"); const projectRoot = __dirname; const packageRoot = path.resolve(projectRoot, ".."); +const appNodeModules = path.resolve(projectRoot, "node_modules"); + +const peerDependencyAliases = [ + "@shopify/react-native-skia", + "react", + "react-native", + "react-native-gesture-handler", + "react-native-reanimated", + "react-native-worklets", +]; +const escapedPackageRoot = packageRoot.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +const blockedRootPeerDependencies = peerDependencyAliases.map( + (packageName) => + new RegExp( + `${escapedPackageRoot}/node_modules/${packageName.replace( + "/", + "\\/", + )}(/.*)?$`, + ), +); const config = getDefaultConfig(projectRoot); +const existingBlockList = config.resolver?.blockList + ? Array.isArray(config.resolver.blockList) + ? config.resolver.blockList + : [config.resolver.blockList] + : []; config.watchFolders = [...(config.watchFolders || []), packageRoot]; config.resolver = { ...config.resolver, + blockList: [...existingBlockList, ...blockedRootPeerDependencies], extraNodeModules: { ...(config.resolver?.extraNodeModules || {}), "@mathnotes/mobile-ink": packageRoot, - "@shopify/react-native-skia": path.resolve( - projectRoot, - "node_modules/@shopify/react-native-skia", + ...Object.fromEntries( + peerDependencyAliases.map((packageName) => [ + packageName, + path.resolve(appNodeModules, packageName), + ]), ), - react: path.resolve(projectRoot, "node_modules/react"), - "react-native": path.resolve(projectRoot, "node_modules/react-native"), }, - nodeModulesPaths: [ - path.resolve(projectRoot, "node_modules"), - path.resolve(packageRoot, "node_modules"), - ], + nodeModulesPaths: [appNodeModules], }; module.exports = config;