1
1
/* eslint-disable no-underscore-dangle */
2
2
3
- // Avoid warning of use `window. require` on dev mode
3
+ // Avoid warning of use metro require on dev mode
4
4
// it actually unnecessary for RN >= 0.56, so it is backward compatibility
5
5
const avoidWarnForRequire = moduleNames => {
6
6
if ( ! moduleNames . length ) moduleNames . push ( 'NativeModules' ) ;
@@ -26,9 +26,17 @@ const avoidWarnForRequire = moduleNames => {
26
26
27
27
let reactNative ;
28
28
29
+ const getRequireMethod = ( ) => {
30
+ // RN >= 0.57
31
+ if ( typeof window . __r === 'function' ) return window . __r ;
32
+ // RN < 0.57
33
+ if ( typeof window . require === 'function' ) return window . require ;
34
+ } ;
35
+
29
36
const lookupForRNModules = ( size = 999 ) => {
37
+ const metroRequire = getRequireMethod ( ) ;
30
38
for ( let moduleId = 0 ; moduleId <= size - 1 ; moduleId ++ ) {
31
- const rn = window . require ( moduleId ) ;
39
+ const rn = metroRequire ( moduleId ) ;
32
40
if ( rn . requireNativeComponent && rn . NativeModules ) {
33
41
return rn ;
34
42
}
@@ -39,12 +47,13 @@ const lookupForRNModules = (size = 999) => {
39
47
const getModule = ( name , size ) => {
40
48
let result ;
41
49
try {
50
+ const metroRequire = getRequireMethod ( ) ;
42
51
// RN >= 0.56
43
- if ( window . require . name === 'metroRequire' ) {
52
+ if ( metroRequire . name === 'metroRequire' ) {
44
53
reactNative = global . $reactNative = reactNative || lookupForRNModules ( size ) ;
45
54
result = reactNative && reactNative [ name ] ;
46
- } else if ( window . require . name === '_require' ) {
47
- result = window . require ( name ) ;
55
+ } else if ( metroRequire . name === '_require' ) {
56
+ result = metroRequire ( name ) ;
48
57
}
49
58
} catch ( e ) { } // eslint-disable-line
50
59
return result || { __empty : true } ;
@@ -61,7 +70,7 @@ const requiredModules = {
61
70
} ;
62
71
63
72
export const getRequiredModules = async size => {
64
- if ( ! window . __DEV__ || typeof window . require !== 'function' ) return ;
73
+ if ( ! window . __DEV__ || ! getRequireMethod ( ) ) return ;
65
74
const done = await avoidWarnForRequire ( Object . keys ( requiredModules ) ) ;
66
75
const modules = { } ;
67
76
for ( const name of Object . keys ( requiredModules ) ) {
0 commit comments