UNPKG

lizi-wxapp-cli

Version:

微信小程序快速创建cli脚手架

94 lines (83 loc) 2.98 kB
import autocomplete from '@moyuyc/inquirer-autocomplete-prompt' import chalk from 'chalk' import fuzzy from 'fuzzy' import inquirer, { Answers, ConfirmQuestion } from 'inquirer' import jsonFormat from 'json-format' import ora, { Ora } from 'ora' import path from 'path' import Base from './base' interface DeleteInterface { init(): Promise<void> delete(): Promise<void> } export default abstract class Delete extends Base implements DeleteInterface { protected selectList: string = '' protected constructor() { super() } public async init(): Promise<void> { await this.getAppJson() await this.getProjectConfig() inquirer.registerPrompt('autocomplete', autocomplete) inquirer.prompt([ this.__selectList(), this.__isDetele() ]).then(({selectList, isDelete}: any) => { this.selectList = selectList if (isDelete) this.delete() }).catch(console.log) } public async delete(): Promise<void> { const loading: Ora = ora('正在删除...').start() let deleteRoot: string = path.join(this.projectRoot, this.selectList) let deleteArr: string[] = deleteRoot.split('/') deleteArr.splice(deleteArr.length - 1, 1) deleteRoot = deleteArr.join('/') // 删除文件 loading.text = '删除文件' await this.trash(deleteRoot) // 修改app.json this.subList.map((v: any, k) => { if (v.path === this.selectList) { if (v.subpackage) { let subIdx: any = this.AppJson.subpackages[v.index] let idx: number = subIdx[this.typeRoot].findIndex(f => path.join(subIdx.root, f) === v.path) subIdx[this.typeRoot].splice(idx, 1) } else { this.AppJson[this.typeRoot].splice(k, 1) } } }) loading.text = '修改app.json' await this.writeFile(this.projectRoot, 'app.json', jsonFormat(this.AppJson)) // 如果是page则还需要修改project.config.json if (this.typeName === '页面') { let projectIdx = this.projectConfigJson.condition.miniprogram.list let index = projectIdx.findIndex(v => v.pathName === deleteRoot) projectIdx.splice(index, 1) loading.text = '修改project.config.json' await this.writeFile(this.projectRoot, 'project.config.json', jsonFormat(this.projectConfigJson)) } loading.succeed(chalk.green(`删除【${this.selectList}】成功`)) } private __selectList(): object { return { type: 'autocomplete', name: 'selectList', message: chalk.red(`选择你要删除的${this.typeName}:`), choices: [], suggestOnly: false, source: (_answers, input: string) => { return Promise.resolve(fuzzy.filter(input, [...this.subList.map(v => v.path)]).map(e => e.original)) } } } private __isDetele(): ConfirmQuestion<Answers> { return { type: 'confirm', name: 'isDelete', message: '删除后可在回收箱恢复,确认删除?', default: true } } }