bunny-cli/bin/utils.js

93 lines
2.6 KiB
JavaScript
Raw Normal View History

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;
}
}
2023-12-22 22:48:42 +08:00
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]; // 匹配选择内容
}
},
/**
* 从仓库clone项目
*/
async downloadProject(targetPath, key, name) {
const spinner = ora('下载中...\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布局
2. vue大屏默认pinia仓库安装Vue-ECharts使用scale布局
📄 请查看 README.md...
🎉 成功创建项目 ${name}
👉 快速使用编辑器或命令行开始开发吧`;
console.log(overText);
console.log(chalk.whiteBright('Happy hacking!'));
} catch (error) {
spinner.fail('😭下载失败,请稍后重试');
}
},
};