From 8c209020d050746e4f6b0bc25cecd7b176f2c056 Mon Sep 17 00:00:00 2001 From: Alexandre Bodin Date: Mon, 13 May 2019 18:38:13 +0200 Subject: [PATCH] Add Delete files option to strapi uninstall --- packages/strapi-admin/controllers/Admin.js | 2 +- packages/strapi/bin/strapi.js | 1 + packages/strapi/lib/commands/uninstall.js | 29 ++++++++++++++++++---- packages/strapi/package.json | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/packages/strapi-admin/controllers/Admin.js b/packages/strapi-admin/controllers/Admin.js index cb6293f62c..e42b884eeb 100644 --- a/packages/strapi-admin/controllers/Admin.js +++ b/packages/strapi-admin/controllers/Admin.js @@ -90,7 +90,7 @@ module.exports = { strapi.reload.isWatching = false; strapi.log.info(`Uninstalling ${plugin}...`); - await execa('npm', ['run', 'strapi', '--', 'uninstall', plugin]); + await execa('npm', ['run', 'strapi', '--', 'uninstall', plugin, '-d']); ctx.send({ ok: true }); diff --git a/packages/strapi/bin/strapi.js b/packages/strapi/bin/strapi.js index 9d6fb661b6..2999d4e7ca 100755 --- a/packages/strapi/bin/strapi.js +++ b/packages/strapi/bin/strapi.js @@ -167,6 +167,7 @@ program program .command('uninstall [plugins...]') .description('uninstall a Strapi plugin') + .option('-d, --delete-files', 'Delete files', false) .action(getLocalScript('uninstall')); /** diff --git a/packages/strapi/lib/commands/uninstall.js b/packages/strapi/lib/commands/uninstall.js index a4d8b53e51..a1b284dd76 100644 --- a/packages/strapi/lib/commands/uninstall.js +++ b/packages/strapi/lib/commands/uninstall.js @@ -1,25 +1,33 @@ 'use strict'; const { join } = require('path'); -const { existsSync } = require('fs-extra'); +const { existsSync, rmdirSync } = require('fs-extra'); const ora = require('ora'); const execa = require('execa'); +const inquirer = require('inquirer'); const { cli } = require('strapi-utils'); const findPackagePath = require('../load/package-path'); -module.exports = async plugins => { +module.exports = async (plugins, { deleteFiles }) => { if (!cli.isStrapiApp()) { return console.log( `⛔️ ${cyan('strapi install')} can only be used inside a Strapi project.` ); } + const answers = await inquirer.prompt([ + { + type: 'confirm', + name: 'deleteFiles', + default: true, + when: !deleteFiles, + }, + ]); + const loader = ora(); const dir = process.cwd(); - const version = require(join(dir, 'package.json')).dependencies.strapi; - - const pluginArgs = plugins.map(name => `strapi-plugin-${name}@${version}`); + const pluginArgs = plugins.map(name => `strapi-plugin-${name}`); try { // verify should rebuild before removing the pacakge @@ -42,6 +50,17 @@ module.exports = async plugins => { loader.succeed(); + if (deleteFiles === true || answers.deleteFiles === true) { + loader.start('Deleting old files'); + for (let name of plugins) { + const pluginDir = join(dir, 'extensions', name); + if (existsSync(pluginDir)) { + rmdirSync(); + } + } + loader.succeed(); + } + if (shouldRebuild) { loader.start(`Rebuilding admin UI`); await execa('npm', ['run', 'build']); diff --git a/packages/strapi/package.json b/packages/strapi/package.json index d0b594632c..d540e64171 100644 --- a/packages/strapi/package.json +++ b/packages/strapi/package.json @@ -30,6 +30,7 @@ "strapi": "./bin/strapi.js" }, "dependencies": { + "inquirer": "^6.2.1", "async": "^2.1.2", "boom": "^5.2.0", "chalk": "^2.4.1",