@@ -1295,7 +1295,8 @@ module.exports = cls => class Reifier extends cls {
1295
1295
1296
1296
const updatedTrees = new Set ( )
1297
1297
const updateNodes = nodes => {
1298
- for ( const { name, tree : addTree } of nodes ) {
1298
+ for ( const node of nodes ) {
1299
+ const { name, tree : addTree } = node
1299
1300
// addTree either the root, or a workspace
1300
1301
const edge = addTree . edgesOut . get ( name )
1301
1302
const pkg = addTree . package
@@ -1371,15 +1372,25 @@ module.exports = cls => class Reifier extends cls {
1371
1372
newSpec = req . saveSpec
1372
1373
}
1373
1374
1375
+ // delete optional dep from prod if installation doesn't fail
1376
+ const shouldDeleteFromProd = pkg . optionalDependencies && pkg . optionalDependencies [ name ] && pkg . dependencies
1377
+ && ! this [ _trashList ] . has ( addTree . children . get ( name ) . path )
1378
+
1374
1379
if ( options . saveType ) {
1375
1380
const depType = saveTypeMap . get ( options . saveType )
1376
1381
pkg [ depType ] [ name ] = newSpec
1377
1382
// rpj will have moved it here if it was in both
1378
1383
// if it is empty it will be deleted later
1379
1384
if ( options . saveType === 'prod' && pkg . optionalDependencies ) {
1380
1385
delete pkg . optionalDependencies [ name ]
1386
+ } else if ( options . saveType === 'optional' && shouldDeleteFromProd ) {
1387
+ delete pkg . dependencies [ name ]
1381
1388
}
1382
1389
} else {
1390
+ if ( shouldDeleteFromProd ) {
1391
+ delete pkg . dependencies [ name ]
1392
+ }
1393
+
1383
1394
if ( hasSubKey ( pkg , 'dependencies' , name ) ) {
1384
1395
pkg . dependencies [ name ] = newSpec
1385
1396
}
0 commit comments