@@ -90,23 +90,27 @@ export class PluginsService implements IPluginsService {
9090
9191 public addToPackageJson ( plugin : string , version : string , isDev : boolean , projectDir : string ) {
9292 const packageJsonPath = this . getPackageJsonFilePath ( projectDir ) ;
93- const packageJsonContent = this . $fs . readJson ( packageJsonPath ) ;
93+ let packageJsonContent = this . $fs . readJson ( packageJsonPath ) ;
9494 const collectionKey = isDev ? "devDependencies" : "dependencies" ;
95+ const oppositeCollectionKey = isDev ? "dependencies" : "devDependencies" ;
96+ if ( packageJsonContent [ oppositeCollectionKey ] && packageJsonContent [ oppositeCollectionKey ] [ plugin ] ) {
97+ const result = this . removeDependencyFromPackageJsonContent ( plugin , packageJsonContent ) ;
98+ packageJsonContent = result . packageJsonContent ;
99+ }
95100
96101 packageJsonContent [ collectionKey ] = packageJsonContent [ collectionKey ] || { } ;
97102 packageJsonContent [ collectionKey ] [ plugin ] = version ;
98103
99104 this . $fs . writeJson ( packageJsonPath , packageJsonContent ) ;
100105 }
101106
102- public removeFromPackageJson ( plugin : string , isDev : boolean , projectDir : string ) {
107+ public removeFromPackageJson ( plugin : string , projectDir : string ) {
103108 const packageJsonPath = this . getPackageJsonFilePath ( projectDir ) ;
104109 const packageJsonContent = this . $fs . readJson ( packageJsonPath ) ;
105- const collection = isDev ? packageJsonContent . devDependencies : packageJsonContent . dependencies ;
110+ const result = this . removeDependencyFromPackageJsonContent ( plugin , packageJsonContent ) ;
106111
107- if ( collection && collection [ plugin ] ) {
108- delete collection [ plugin ] ;
109- this . $fs . writeJson ( packageJsonPath , packageJsonContent ) ;
112+ if ( result . hasModifiedPackageJson ) {
113+ this . $fs . writeJson ( packageJsonPath , result . packageJsonContent ) ;
110114 }
111115 }
112116
@@ -199,6 +203,25 @@ export class PluginsService implements IPluginsService {
199203 return pluginData ;
200204 }
201205
206+ private removeDependencyFromPackageJsonContent ( dependency : string , packageJsonContent : Object ) : { hasModifiedPackageJson : boolean , packageJsonContent : Object } {
207+ let hasModifiedPackageJson = false ;
208+
209+ if ( packageJsonContent . devDependencies && packageJsonContent . devDependencies [ dependency ] ) {
210+ delete packageJsonContent . devDependencies [ dependency ] ;
211+ hasModifiedPackageJson = true ;
212+ }
213+
214+ if ( packageJsonContent . dependencies && packageJsonContent . dependencies [ dependency ] ) {
215+ delete packageJsonContent . dependencies [ dependency ] ;
216+ hasModifiedPackageJson = true ;
217+ }
218+
219+ return {
220+ hasModifiedPackageJson,
221+ packageJsonContent
222+ } ;
223+ }
224+
202225 private getBasicPluginInformation ( dependencies : any ) : IBasePluginData [ ] {
203226 return _ . map ( dependencies , ( version : string , key : string ) => ( {
204227 name : key ,
0 commit comments