1+ const path = require ( "path" ) ;
2+ const { resolve : defaultResolve } = require ( "metro-resolver" ) ;
13const { makeMetroConfig } = require ( "@rnx-kit/metro-config" ) ;
2- module . exports = makeMetroConfig ( {
4+
5+ const root = path . resolve ( __dirname , "../.." ) ;
6+ const rnwPath = path . resolve ( root , "node_modules/react-native-web" ) ;
7+ const assetRegistryPath = path . resolve (
8+ root ,
9+ "node_modules/react-native-web/dist/modules/AssetRegistry/index" ,
10+ ) ;
11+
12+ const metroConfig = makeMetroConfig ( {
313 transformer : {
414 getTransformOptions : async ( ) => ( {
515 transform : {
@@ -9,3 +19,39 @@ module.exports = makeMetroConfig({
919 } ) ,
1020 } ,
1121} ) ;
22+
23+ function getWebMetroConfig ( config ) {
24+ config . resolver = config . resolver ?? { } ;
25+ config . resolver . platforms = [ "ios" , "android" , "web" ] ;
26+
27+ const origResolveRequest =
28+ config . resolver . resolveRequest ??
29+ ( ( context , moduleName , platform ) =>
30+ defaultResolve ( context , moduleName , platform ) ) ;
31+
32+ config . resolver . resolveRequest = ( contextRaw , moduleName , platform ) => {
33+ const context = {
34+ ...contextRaw ,
35+ preferNativePlatform : false ,
36+ } ;
37+
38+ if ( moduleName === "react-native" ) {
39+ return {
40+ filePath : path . resolve ( rnwPath , "dist/index.js" ) ,
41+ type : "sourceFile" ,
42+ } ;
43+ }
44+
45+ // Let default config handle other modules
46+ return origResolveRequest ( context , moduleName , platform ) ;
47+ } ;
48+
49+ config . transformer = config . transformer ?? { } ;
50+ config . transformer . assetRegistryPath = assetRegistryPath ;
51+
52+ return config ;
53+ }
54+
55+ module . exports = ! ! process . env . IS_WEB_BUILD
56+ ? getWebMetroConfig ( metroConfig )
57+ : metroConfig ;
0 commit comments