|
1 | | -const { getDefaultConfig } = require('expo/metro-config'); |
| 1 | +const { getDefaultConfig } = require('@react-native/metro-config'); |
2 | 2 | const path = require('path'); |
3 | 3 |
|
4 | 4 | // Monorepo root |
5 | 5 | const projectRoot = __dirname; |
6 | 6 | const monorepoRoot = path.resolve(projectRoot, '../..'); |
7 | 7 |
|
8 | 8 | /** |
9 | | - * Metro configuration for Expo monorepo |
| 9 | + * Metro configuration for React Native monorepo |
10 | 10 | */ |
11 | | -const config = getDefaultConfig(projectRoot); |
| 11 | +module.exports = (async () => { |
| 12 | + const config = await getDefaultConfig(projectRoot); |
12 | 13 |
|
13 | | -config.watchFolders = [monorepoRoot]; |
14 | | -config.resolver.nodeModulesPaths = [ |
15 | | - path.resolve(projectRoot, 'node_modules'), |
16 | | - path.resolve(monorepoRoot, 'node_modules'), |
17 | | -]; |
18 | | -config.resolver.disableHierarchicalLookup = false; |
| 14 | + config.watchFolders = [monorepoRoot]; |
| 15 | + config.resolver = config.resolver || {}; |
| 16 | + config.resolver.nodeModulesPaths = [ |
| 17 | + path.resolve(projectRoot, 'node_modules'), |
| 18 | + path.resolve(monorepoRoot, 'node_modules'), |
| 19 | + ]; |
| 20 | + config.resolver.disableHierarchicalLookup = false; |
19 | 21 |
|
20 | | -const pinnedModules = { |
21 | | - react: path.resolve(projectRoot, 'node_modules/react'), |
22 | | - 'react-native': path.resolve(projectRoot, 'node_modules/react-native'), |
23 | | - 'react-native-reanimated': path.resolve( |
24 | | - projectRoot, |
25 | | - 'node_modules/react-native-reanimated' |
26 | | - ), |
27 | | - 'react-native-worklets': path.resolve( |
28 | | - projectRoot, |
29 | | - 'node_modules/react-native-worklets' |
30 | | - ), |
31 | | - 'react-native-gesture-handler': path.resolve( |
32 | | - projectRoot, |
33 | | - 'node_modules/react-native-gesture-handler' |
34 | | - ), |
35 | | -}; |
| 22 | + const pinnedModules = { |
| 23 | + react: path.resolve(projectRoot, 'node_modules/react'), |
| 24 | + 'react-native': path.resolve(projectRoot, 'node_modules/react-native'), |
| 25 | + 'react-native-reanimated': path.resolve( |
| 26 | + projectRoot, |
| 27 | + 'node_modules/react-native-reanimated' |
| 28 | + ), |
| 29 | + 'react-native-worklets': path.resolve( |
| 30 | + projectRoot, |
| 31 | + 'node_modules/react-native-worklets' |
| 32 | + ), |
| 33 | + 'react-native-gesture-handler': path.resolve( |
| 34 | + projectRoot, |
| 35 | + 'node_modules/react-native-gesture-handler' |
| 36 | + ), |
| 37 | + }; |
36 | 38 |
|
37 | | -config.resolver.extraNodeModules = pinnedModules; |
38 | | -config.resolver.resolveRequest = (context, moduleName, platform) => { |
39 | | - for (const [name, modulePath] of Object.entries(pinnedModules)) { |
40 | | - if (moduleName === name || moduleName.startsWith(`${name}/`)) { |
41 | | - const target = path.join(modulePath, moduleName.slice(name.length)); |
42 | | - return context.resolveRequest(context, target, platform); |
| 39 | + config.resolver.extraNodeModules = pinnedModules; |
| 40 | + config.resolver.resolveRequest = (context, moduleName, platform) => { |
| 41 | + for (const [name, modulePath] of Object.entries(pinnedModules)) { |
| 42 | + if (moduleName === name || moduleName.startsWith(`${name}/`)) { |
| 43 | + const target = path.join(modulePath, moduleName.slice(name.length)); |
| 44 | + return context.resolveRequest(context, target, platform); |
| 45 | + } |
43 | 46 | } |
44 | | - } |
45 | 47 |
|
46 | | - return context.resolveRequest(context, moduleName, platform); |
47 | | -}; |
| 48 | + return context.resolveRequest(context, moduleName, platform); |
| 49 | + }; |
48 | 50 |
|
49 | | -module.exports = config; |
| 51 | + return config; |
| 52 | +})(); |
0 commit comments