11const spawn = require ( '../spawn' ) ;
2+ const path = require ( "path" )
23const { color } = require ( '../fonts' ) ;
34
4- module . exports = async function linkPackages ( repos , args ) {
5+ module . exports = async ( repos , args ) => {
56 const failed = [ ] , isLinked = { } ;
67
78 try {
@@ -13,38 +14,50 @@ module.exports = async function linkPackages(repos, args) {
1314 if ( process . cwd ( ) === repo . absolutePath )
1415 continue
1516
16- let exitCode = await spawn ( repo . packageManager , [ 'link' ] , {
17- cwd : repo . absolutePath ,
18- shell : true ,
19- stdio : 'inherit'
20- } ) ;
17+ if ( repo . packageManager === 'npm' ) {
18+ let dir = path . resolve ( process . cwd ( ) , 'node_modules' ) ;
19+ let dest = path . resolve ( path . resolve ( repo . absolutePath ) , 'node_modules' ) ;
20+ if ( dir && dest ) {
21+ if ( fs . existsSync ( dest ) )
22+ await fs . promises . rm ( dest , { recursive : true , force : true } ) ;
2123
22- if ( exitCode !== 0 ) {
23- failed . push ( {
24- name : repo . name ,
25- des : `${ repo . packageManager } link failed`
26- } )
27- console . error ( color . red + `${ repo . name } : ${ repo . packageManager } link failed` + color . reset )
24+ await fs . promises . symlink ( dir , dest , 'dir' ) ;
25+ console . log ( repo . packageManager , 'link' , repo . packageName )
26+ }
2827 } else {
29- console . log ( repo . packageManager , 'link' , repo . packageName )
3028
31- let exitCode = await spawn ( repo . packageManager , [ 'link' , repo . packageName ] , {
32- cwd : process . cwd ( ) ,
29+ let exitCode = await spawn ( repo . packageManager , [ 'link' ] , {
30+ cwd : repo . absolutePath ,
3331 shell : true ,
3432 stdio : 'inherit'
35- } )
33+ } ) ;
34+
3635 if ( exitCode !== 0 ) {
3736 failed . push ( {
3837 name : repo . name ,
39- des : `${ repo . packageManager } link ${ repo . packageName } failed`
40- } ) ;
41- console . error ( color . red + `${ repo . name } : ${ repo . packageManager } link ${ repo . packageName } failed` + color . reset )
38+ des : `${ repo . packageManager } link failed`
39+ } )
40+ console . error ( color . red + `${ repo . name } : ${ repo . packageManager } link failed` + color . reset )
41+ } else {
42+ console . log ( repo . packageManager , 'link' , repo . packageName )
43+
44+ let exitCode = await spawn ( repo . packageManager , [ 'link' , repo . packageName ] , {
45+ cwd : process . cwd ( ) ,
46+ shell : true ,
47+ stdio : 'inherit'
48+ } )
49+ if ( exitCode !== 0 ) {
50+ failed . push ( {
51+ name : repo . name ,
52+ des : `${ repo . packageManager } link ${ repo . packageName } failed`
53+ } ) ;
54+ console . error ( color . red + `${ repo . name } : ${ repo . packageManager } link ${ repo . packageName } failed` + color . reset )
55+ }
4256 }
43- }
4457
45- // await doLink(repo.deps, repo, repos, failed, isLinked)
46- // await doLink(repo.devDeps, repo, repos, failed, isLinked)
58+ }
4759 }
60+
4861 }
4962 catch ( err ) {
5063 failed . push ( { name : 'GENERAL' , des : err . message } )
@@ -53,55 +66,3 @@ module.exports = async function linkPackages(repos, args) {
5366
5467 return failed ;
5568}
56-
57-
58- async function doLink ( deps , repo , repos , failed , isLinked ) {
59- let { packageManager } = repo ;
60-
61- for ( let dep of deps ) {
62- let depMeta = repos . find ( meta => meta . packageName === dep ) ;
63- try {
64-
65- if ( depMeta && ! isLinked [ depMeta . packageName ] ) {
66-
67- isLinked [ depMeta . packageName ] = true ;
68- let exitCode = await spawn ( packageManager , [ 'link' ] , {
69- cwd : depMeta . absolutePath ,
70- shell : true ,
71- stdio : 'inherit'
72- } ) ;
73-
74- if ( exitCode !== 0 ) {
75- failed . push ( {
76- name : depMeta . name ,
77- des : `${ packageManager } link failed`
78- } )
79- console . error ( color . red + `${ depMeta . name } : ${ packageManager } link failed` + color . reset )
80- }
81- }
82-
83- if ( ! depMeta )
84- depMeta = { packageName : dep }
85- console . log ( repo . packageName , 'linking' , depMeta . packageName , '...' )
86-
87- let exitCode = await spawn ( packageManager , [ 'link' , depMeta . packageName ] , {
88- cwd : repo . absolutePath ,
89- shell : true ,
90- stdio : 'inherit'
91- } )
92- if ( exitCode !== 0 ) {
93- failed . push ( {
94- name : repo . name ,
95- des : `${ packageManager } link ${ depMeta . packageName } failed`
96- } ) ;
97- console . error ( color . red + `${ repo . name } : ${ packageManager } link ${ depMeta . packageName } failed` + color . reset )
98- }
99-
100- }
101- catch ( err ) {
102- failed . push ( { name : repo . packageName , des : err . message } )
103- console . error ( color . red + `${ err } ` + color . reset )
104- }
105-
106- }
107- }
0 commit comments