const chalk = require('chalk'); // 终端输出颜色变化 const inquirer = require('inquirer'); // 交互选项 const ora = require('ora'); // loading效果 const gitClone = require('git-clone/promise'); // 拉取项目 const fs = require('fs-extra'); // 操作文件 const path = require('path'); // 引入操作路径 const { question, projectList } = require('./config'); module.exports = { /** * 判断文件是否存在 * 是否需要覆盖 */ async fileIsExist(targetPath, name) { if (fs.existsSync(targetPath, name)) { const awsaner = await inquirer.prompt({ type: 'confirm', message: '是否覆盖文件夹❓', default: false, name: 'overWrite', }); // 用户选择是则删除文件夹 if (awsaner.overWrite) { fs.remove(targetPath); console.log(chalk.green('✅删除成功')); return true; } else { console.log(chalk.yellow('❌程序退出')); return false; } } return true; }, /** * 创建文项目 */ async createProject() { // 选择框架和语言 const frame = await inquirer.prompt(question.frame); const frameType = `${frame.type}`; // 如果选择的react框架 if (frame.type === 'react') { const awsaner = await inquirer.prompt(question.react); const key = `${frameType}&${awsaner.router}`; return projectList[key]; // 匹配选择内容 } // 如果选择是vue框架 else if (frame.type === 'vue') { const awsaner = await inquirer.prompt(question.vue); const key = `${frameType}&${awsaner.router}`; return projectList[key]; // 匹配选择内容 } // 大屏模板 else if (frame.type === 'large') { const awsaner = await inquirer.prompt(question.large); const key = `${frameType}&${awsaner.large}`; return projectList[key]; // 匹配选择内容 } // 后台管理 else if (frame.type === 'admin') { const awsaner = await inquirer.prompt(question.admin); const key = `${frameType}&${awsaner.admin}`; console.log(key); console.log(projectList[key]); return projectList[key]; // 匹配选择内容 } // java模板 else if (frame.type === 'java') { const awsaner = await inquirer.prompt(question.java); const key = `${frameType}&${awsaner.java}`; return projectList[key]; // 匹配选择内容 } }, /** * 从仓库clone项目 */ async downloadProject(targetPath, key, name) { const spinner = ora('由于无法输出子进程所以看不到下载进度\n下载中...\n').start(); try { await gitClone(key, name, { checkout: 'master' }); spinner.succeed('😄下载成功'); // 如果有git,删除原有的git if (fs.existsSync(targetPath, '.git')) { fs.remove(path.join(targetPath, '.git')); } const overText = ` ⚓ 1. vue大屏默认pinia仓库,安装Vue-ECharts,使用rem、vwvh、rem+vwvh、scale布局 ⚓ 2. vue开发模版使用vite和vue-cli两种方式 ⚓ 3. 后台模板使用vite ⚓ 4. React模板3种方式 ⚓ 5. Java单体开发模版 📄 请查看 README.md... 🎉 成功创建项目 ${name} 👉 快速使用编辑器或命令行开始开发吧`; console.log(overText); console.log(chalk.whiteBright('Happy hacking!')); } catch (error) { spinner.fail('😭下载失败,请稍后重试'); } }, };