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) { console.log(targetPath); 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('✅删除成功')); } else return; } }, /** * 创建文项目 */ async createProject() { // 选择框架和语言 const frame = await inquirer.prompt(question.frame); const frame_isTypeScript = `${frame.type}&${frame.isTypeScript}`; // 如果选择的react框架 if (frame.type === 'react') { const awsaner = await inquirer.prompt(question.react); const key = `${frame_isTypeScript}&${awsaner.router}`; return projectList[key]; } // 如果选择是vue框架 else { const awsaner = await inquirer.prompt(question.vue); const key = `${frame_isTypeScript}&${awsaner.router}`; return projectList[key]; } }, /** * 从仓库clone项目 */ downloadProject(targetPath, key, name) { const spinner = ora('下载中...').start(); // 注意要使用x几版本因为不支持 // 如果有git,删除原有的git if (fs.existsSync(targetPath, '.git')) { fs.remove(path.join(targetPath, '.git')); } gitClone(projectList[key], name, { checkout: 'main' }, function (error) { if (error) { spinner.fail('😭下载失败,请稍后重试'); // 注意要使用x几版本因为不支持 } else { spinner.succeed('😄下载成功'); // 注意要使用x几版本因为不支持 const overText = ` ⚓ Running completion hooks... 📄 Generating README.md... 🎉 Successfully created project ${name} 👉 Get started with the following commands: cd vue_js_vuex npm run serve `; console.log(overText); } }); }, };