@@ -87,10 +87,9 @@ export const addPackages = async (
8787 )
8888 return null
8989 }
90- const versionToInstall = version || getLatestPackageVersion ( name )
9190
91+ const versionToInstall = version || getLatestPackageVersion ( name )
9292 const storedPackageDir = getPackageStoreDir ( name , versionToInstall )
93-
9493 if ( ! fs . existsSync ( storedPackageDir ) ) {
9594 console . log (
9695 `Could not find package \`${ packageName } \` ` + storedPackageDir ,
@@ -101,13 +100,10 @@ export const addPackages = async (
101100
102101 const pkg = readPackageManifest ( storedPackageDir )
103102 if ( ! pkg ) {
104- return
103+ return null
105104 }
106- const destYalcCopyDir = join ( workingDir , values . yalcPackagesFolder , name )
107-
108- emptyDirExcludeNodeModules ( destYalcCopyDir )
109- fs . copySync ( storedPackageDir , destYalcCopyDir )
110105
106+ const signature = readSignatureFile ( storedPackageDir )
111107 let replacedVersion = ''
112108 if ( doPure ) {
113109 if ( localPkg . workspaces ) {
@@ -126,60 +122,65 @@ export const addPackages = async (
126122 )
127123 }
128124 if ( ! doPure ) {
129- const destModulesDir = join ( workingDir , 'node_modules' , name )
130- fs . removeSync ( destModulesDir )
131- if ( options . link ) {
132- ensureSymlinkSync ( destYalcCopyDir , destModulesDir , 'junction' )
133- } else {
134- fs . copySync ( destYalcCopyDir , destModulesDir )
135- }
136-
137- if ( ! options . noSave ) {
125+ if ( ! options . link ) {
138126 const protocol = options . link ? 'link:' : 'file:'
139127 const localAddress =
140128 protocol + values . yalcPackagesFolder + '/' + pkg . name
141129
142130 const dependencies = localPkg . dependencies || { }
143131 const devDependencies = localPkg . devDependencies || { }
144- let whereToAdd = options . dev ? devDependencies : dependencies
145132
146- if ( options . dev ) {
147- if ( dependencies [ pkg . name ] ) {
148- replacedVersion = dependencies [ pkg . name ]
149- delete dependencies [ pkg . name ]
150- }
151- } else {
152- if ( ! dependencies [ pkg . name ] ) {
153- if ( devDependencies [ pkg . name ] ) {
154- whereToAdd = devDependencies
155- }
156- }
157- }
133+ const whereToRemove = devDependencies [ pkg . name ]
134+ ? devDependencies
135+ : dependencies
158136
159- if ( whereToAdd [ pkg . name ] !== localAddress ) {
160- replacedVersion = replacedVersion || whereToAdd [ pkg . name ]
161- whereToAdd [ pkg . name ] = localAddress
162- localPkg . dependencies =
163- whereToAdd === dependencies ? dependencies : localPkg . dependencies
164- localPkg . devDependencies =
165- whereToAdd === devDependencies
137+ replacedVersion = whereToRemove [ pkg . name ] || ''
138+ if ( replacedVersion !== localAddress ) {
139+ const whereToAdd =
140+ options . dev || whereToRemove === devDependencies
166141 ? devDependencies
167- : localPkg . devDependencies
142+ : dependencies
143+
168144 localPkgUpdated = true
145+ whereToAdd [ pkg . name ] = localAddress
146+ if ( whereToAdd !== whereToRemove ) {
147+ delete whereToRemove [ pkg . name ]
148+ }
149+ } else {
150+ replacedVersion = ''
169151 }
170- replacedVersion =
171- replacedVersion == localAddress ? '' : replacedVersion
172152 }
173153
154+ const destYalcCopyDir = join (
155+ workingDir ,
156+ values . yalcPackagesFolder ,
157+ name
158+ )
159+
160+ if ( signature === readSignatureFile ( destYalcCopyDir ) ) {
161+ console . log (
162+ `"${ packageName } " already exists in the local ".yalc" directory`
163+ )
164+ return null
165+ }
166+
167+ // Replace the local ".yalc/{name}" directory.
168+ fs . removeSync ( destYalcCopyDir )
169+ fs . copySync ( storedPackageDir , destYalcCopyDir )
170+
171+ // Replace the local "node_modules/{name}" symlink.
172+ const nodeModulesPath = join ( workingDir , 'node_modules' , name )
173+ fs . removeSync ( nodeModulesPath )
174+ ensureSymlinkSync ( destYalcCopyDir , nodeModulesPath , 'junction' )
175+
174176 const addedAction = options . noSave ? 'linked' : 'added'
175177 console . log (
176178 `Package ${ pkg . name } @${
177179 pkg . version
178- } ${ addedAction } ==> ${ destModulesDir } .`
180+ } ${ addedAction } ==> ${ nodeModulesPath } .`
179181 )
180182 }
181183
182- const signature = readSignatureFile ( storedPackageDir )
183184 return {
184185 signature,
185186 name,
0 commit comments