@@ -99,23 +99,12 @@ export const addPackages = async (
9999 return null
100100 }
101101
102- const signature = readSignatureFile ( storedPackageDir )
103- const destYalcCopyDir = join ( workingDir , values . yalcPackagesFolder , name )
104- if ( signature === readSignatureFile ( destYalcCopyDir ) ) {
105- console . log (
106- `"${ packageName } " already exists in the local ".yalc" directory`
107- )
108- return null
109- }
110-
111102 const pkg = readPackageManifest ( storedPackageDir )
112103 if ( ! pkg ) {
113104 return null
114105 }
115106
116- emptyDirExcludeNodeModules ( destYalcCopyDir )
117- fs . copySync ( storedPackageDir , destYalcCopyDir )
118-
107+ const signature = readSignatureFile ( storedPackageDir )
119108 let replacedVersion = ''
120109 if ( doPure ) {
121110 if ( localPkg . workspaces ) {
@@ -134,52 +123,62 @@ export const addPackages = async (
134123 )
135124 }
136125 if ( ! doPure ) {
137- const destModulesDir = join ( workingDir , 'node_modules' , name )
138-
139- fs . removeSync ( destModulesDir )
140- ensureSymlinkSync ( destYalcCopyDir , destModulesDir , 'junction' )
141-
142126 if ( ! options . link ) {
143127 const protocol = options . linkDep ? 'link:' : 'file:'
144128 const localAddress =
145129 protocol + values . yalcPackagesFolder + '/' + pkg . name
146130
147131 const dependencies = localPkg . dependencies || { }
148132 const devDependencies = localPkg . devDependencies || { }
149- let whereToAdd = options . dev ? devDependencies : dependencies
150133
151- if ( options . dev ) {
152- if ( dependencies [ pkg . name ] ) {
153- replacedVersion = dependencies [ pkg . name ]
154- delete dependencies [ pkg . name ]
155- }
156- } else {
157- if ( ! dependencies [ pkg . name ] ) {
158- if ( devDependencies [ pkg . name ] ) {
159- whereToAdd = devDependencies
160- }
161- }
162- }
134+ const whereToRemove = devDependencies [ pkg . name ]
135+ ? devDependencies
136+ : dependencies
163137
164- if ( whereToAdd [ pkg . name ] !== localAddress ) {
165- replacedVersion = replacedVersion || whereToAdd [ pkg . name ]
166- whereToAdd [ pkg . name ] = localAddress
167- localPkg . dependencies =
168- whereToAdd === dependencies ? dependencies : localPkg . dependencies
169- localPkg . devDependencies =
170- whereToAdd === devDependencies
138+ replacedVersion = whereToRemove [ pkg . name ] || ''
139+ if ( replacedVersion !== localAddress ) {
140+ const whereToAdd =
141+ options . dev || whereToRemove === devDependencies
171142 ? devDependencies
172- : localPkg . devDependencies
143+ : dependencies
144+
173145 localPkgUpdated = true
146+ whereToAdd [ pkg . name ] = localAddress
147+ if ( whereToAdd !== whereToRemove ) {
148+ delete whereToRemove [ pkg . name ]
149+ }
150+ } else {
151+ replacedVersion = ''
174152 }
175- replacedVersion =
176- replacedVersion == localAddress ? '' : replacedVersion
177153 }
154+
155+ const destYalcCopyDir = join (
156+ workingDir ,
157+ values . yalcPackagesFolder ,
158+ name
159+ )
160+
161+ if ( signature === readSignatureFile ( destYalcCopyDir ) ) {
162+ console . log (
163+ `"${ packageName } " already exists in the local ".yalc" directory`
164+ )
165+ return null
166+ }
167+
168+ // Replace the local ".yalc/{name}" directory.
169+ fs . removeSync ( destYalcCopyDir )
170+ fs . copySync ( storedPackageDir , destYalcCopyDir )
171+
172+ // Replace the local "node_modules/{name}" symlink.
173+ const nodeModulesPath = join ( workingDir , 'node_modules' , name )
174+ fs . removeSync ( nodeModulesPath )
175+ ensureSymlinkSync ( destYalcCopyDir , nodeModulesPath , 'junction' )
176+
178177 const addedAction = options . link ? 'linked' : 'added'
179178 console . log (
180179 `Package ${ pkg . name } @${
181180 pkg . version
182- } ${ addedAction } ==> ${ destModulesDir } .`
181+ } ${ addedAction } ==> ${ nodeModulesPath } .`
183182 )
184183 }
185184
0 commit comments