-
-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathmetro.config.js
More file actions
92 lines (82 loc) · 2.84 KB
/
metro.config.js
File metadata and controls
92 lines (82 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* eslint-disable no-undef */
// Learn more https://docs.expo.io/guides/customizing-metro
const escape = require('escape-string-regexp')
const { getDefaultConfig } = require('expo/metro-config')
const { default: exclusionList } = require('metro-config/private/defaults/exclusionList')
const path = require('node:path')
const pakLib = require('../../packages/audio-studio/package.json')
const pakUI = require('../../packages/audio-ui/package.json')
// Find the project and workspace directories
const projectRoot = __dirname
// This can be replaced with `find-yarn-workspace-root`
const monorepoRoot = path.resolve(projectRoot, '../..')
const uiRoot = path.resolve(monorepoRoot, 'packages/audio-ui')
const libRoot = path.resolve(monorepoRoot, 'packages/audio-studio')
const modules = [
'react-native-paper',
'react-native-safe-area-context',
'react-native-reanimated',
'@siteed/audio-ui',
'react-native-gesture-handler',
'@siteed/expo-audio-studio',
'react-dom',
'react',
'react-native',
...Object.keys({ ...pakUI.peerDependencies }),
...Object.keys({ ...pakLib.peerDependencies }),
]
const extraNodeModules = modules.reduce((acc, name) => {
acc[name] = path.join(__dirname, 'node_modules', name)
return acc
}, {})
// Prevent metro from resolving duplicate packages
const blacklistRE = exclusionList(
modules
.map(
(m) =>
new RegExp(
`^${escape(path.join(uiRoot, 'node_modules', m))}\\/.*$`
)
)
.concat(
modules.map(
(m) =>
new RegExp(
`^${escape(path.join(libRoot, 'node_modules', m))}\\/.*$`
)
)
)
)
/** @type {import('expo/metro-config').MetroConfig} */
const config = getDefaultConfig(__dirname)
// 1. Watch all files within the monorepo
config.watchFolders = [monorepoRoot]
config.transformer.getTransformOptions = async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
})
config.resolver.nodeModulesPaths = [path.resolve(projectRoot, 'node_modules')]
config.resolver = {
...config.resolver,
extraNodeModules,
blacklistRE,
resolveRequest: (context, moduleName, platform) => {
if (moduleName === '@siteed/audio-ui') {
return {
filePath: monorepoRoot + '/packages/audio-ui/src/index.ts',
type: 'sourceFile',
}
} else if (moduleName === '@siteed/expo-audio-studio') {
return {
filePath:
monorepoRoot + '/packages/audio-studio/src/index.ts',
type: 'sourceFile',
}
}
// Ensure you call the default resolver.
return context.resolveRequest(context, moduleName, platform)
},
}
module.exports = config