@@ -6,59 +6,34 @@ import { assertExists } from '../../utils';
6
6
7
7
export default ( api : IApi ) => {
8
8
const {
9
- pkg,
10
- utils : { resolve, winPath } ,
11
- paths : { absNodeModulesPath = '' , absSrcPath = '' , cwd } ,
9
+ utils : { winPath, resolve } ,
10
+ paths : { absNodeModulesPath = '' , absSrcPath = '' , absTmpPath } ,
12
11
} = api ;
13
12
14
- function getUserLibDir ( { library } : { library : string } ) {
15
- if ( ( pkg . dependencies && pkg . dependencies [ library ] ) || ( pkg . devDependencies && pkg . devDependencies [ library ] ) ) {
16
- // 通过 resolve 往上找,可支持 lerna 仓库
17
- // lerna 仓库如果用 yarn workspace 的依赖不一定在 node_modules,可能被提到根目录,并且没有 link
18
- return winPath (
19
- resolve . sync ( library , {
20
- basedir : cwd ,
21
- } ) ,
22
- ) ;
23
- }
13
+ function getUserLibDir ( library : string , dir ?: boolean ) {
14
+ try {
15
+ if ( dir ) {
16
+ return dirname (
17
+ resolve . sync ( join ( library , 'package.json' ) , {
18
+ basedir : absTmpPath ,
19
+ } ) ,
20
+ ) ;
21
+ } else {
22
+ return resolve . sync ( library , {
23
+ basedir : absTmpPath ,
24
+ } ) ;
25
+ }
26
+ } catch ( ignored ) { }
24
27
return null ;
25
28
}
26
29
27
- const REACT_NATIVE_PATH = join ( absNodeModulesPath , 'react-native' ) ;
28
- const METRO_PATH = join ( absNodeModulesPath , 'react-native' ) ;
30
+ const REACT_NATIVE_PATH = getUserLibDir ( 'react-native' , true ) || join ( absNodeModulesPath , 'react-native' ) ;
29
31
assertExists ( REACT_NATIVE_PATH ) ;
30
- assertExists ( METRO_PATH ) ;
31
32
const { version } = require ( join ( REACT_NATIVE_PATH , 'package.json' ) ) ;
32
- const Libraries = [
33
- {
34
- name : 'react-router' ,
35
- path : 'react-router' ,
36
- } ,
37
- {
38
- name : 'react-router-config' ,
39
- path : 'react-router-config' ,
40
- } ,
41
- {
42
- name : 'react-router-dom' , // hack for plugin-dva
43
- path : 'react-router-native' ,
44
- } ,
45
- {
46
- name : 'react-router-native' ,
47
- path : 'react-router-native' ,
48
- } ,
49
- // {
50
- // name: '@umijs/runtime',
51
- // path: '@umijs/runtime',
52
- // },
53
- // {
54
- // name: 'history',
55
- // path: 'history-with-query',
56
- // },
57
- ] ;
58
33
59
34
let appKey ;
60
35
try {
61
- const appJson = JSON . parse ( readFileSync ( join ( absSrcPath , 'app.json' ) , 'utf8' ) ) ;
36
+ const appJson = JSON . parse ( readFileSync ( getUserLibDir ( 'app.json' ) || join ( absSrcPath , 'app.json' ) , 'utf8' ) ) ;
62
37
appKey = appJson . name ;
63
38
} catch ( ignored ) { }
64
39
@@ -78,10 +53,38 @@ export default (api: IApi) => {
78
53
} ) ;
79
54
80
55
api . chainWebpack ( ( memo ) => {
81
- Libraries . forEach ( ( { name, path } ) => {
82
- memo . resolve . alias . set ( name , getUserLibDir ( { library : path } ) || winPath ( require . resolve ( join ( path ) ) ) ) ;
83
- } ) ;
84
- memo . resolve . alias . set ( 'react-native' , REACT_NATIVE_PATH ) . set ( 'metro' , METRO_PATH ) ;
56
+ const reactRouterNativePath = winPath (
57
+ getUserLibDir ( 'react-router-native' , true ) || dirname ( require . resolve ( 'react-router-native/package.json' ) ) ,
58
+ ) ;
59
+ memo . resolve . alias
60
+ . set (
61
+ 'history' ,
62
+ winPath (
63
+ getUserLibDir ( 'history-with-query/esm/history.js' ) || require . resolve ( 'history-with-query/esm/history.js' ) ,
64
+ ) ,
65
+ )
66
+ . set (
67
+ 'react-router' ,
68
+ winPath (
69
+ getUserLibDir ( 'react-router/esm/react-router.js' ) || require . resolve ( 'react-router/esm/react-router.js' ) ,
70
+ ) ,
71
+ )
72
+ . set ( 'react-router-dom' , reactRouterNativePath ) // hack for dva
73
+ . set ( 'react-router-native' , reactRouterNativePath )
74
+ . set (
75
+ 'react-router-config' ,
76
+ winPath (
77
+ getUserLibDir ( 'react-router-config/esm/react-router-config.js' ) ||
78
+ require . resolve ( 'react-router-config/esm/react-router-config.js' ) ,
79
+ ) ,
80
+ )
81
+ . set (
82
+ '@umijs/runtime' ,
83
+ winPath (
84
+ getUserLibDir ( '@umijs/runtime/dist/index.esm.js' ) ||
85
+ resolve . sync ( '@umijs/runtime/dist/index.esm.js' , { basedir : process . env . UMI_DIR } ) ,
86
+ ) ,
87
+ ) ;
85
88
return memo ;
86
89
} ) ;
87
90
0 commit comments