2023-12-22 17:38:13 +08:00
|
|
|
|
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('✅删除成功'));
|
2023-12-22 21:46:45 +08:00
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
console.log(chalk.yellow('❌程序退出'));
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-12-22 17:38:13 +08:00
|
|
|
|
}
|
2023-12-22 22:48:42 +08:00
|
|
|
|
return true;
|
2023-12-22 17:38:13 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建文项目
|
|
|
|
|
*/
|
|
|
|
|
async createProject() {
|
|
|
|
|
// 选择框架和语言
|
|
|
|
|
const frame = await inquirer.prompt(question.frame);
|
2024-02-28 09:34:41 +08:00
|
|
|
|
const frameType = `${frame.type}`;
|
2023-12-22 17:38:13 +08:00
|
|
|
|
|
|
|
|
|
// 如果选择的react框架
|
|
|
|
|
if (frame.type === 'react') {
|
|
|
|
|
const awsaner = await inquirer.prompt(question.react);
|
2024-02-28 09:34:41 +08:00
|
|
|
|
const key = `${frameType}&${awsaner.router}`;
|
2024-05-09 12:57:10 +08:00
|
|
|
|
|
2024-02-28 09:34:41 +08:00
|
|
|
|
return projectList[key]; // 匹配选择内容
|
2023-12-22 17:38:13 +08:00
|
|
|
|
}
|
|
|
|
|
// 如果选择是vue框架
|
2024-02-28 09:34:41 +08:00
|
|
|
|
else if (frame.type === 'vue') {
|
2023-12-22 17:38:13 +08:00
|
|
|
|
const awsaner = await inquirer.prompt(question.vue);
|
2024-02-28 09:34:41 +08:00
|
|
|
|
const key = `${frameType}&${awsaner.router}`;
|
|
|
|
|
|
|
|
|
|
return projectList[key]; // 匹配选择内容
|
2024-05-08 16:57:55 +08:00
|
|
|
|
}
|
|
|
|
|
// 大屏模板
|
|
|
|
|
else if (frame.type === 'large') {
|
2024-02-28 09:34:41 +08:00
|
|
|
|
const awsaner = await inquirer.prompt(question.large);
|
|
|
|
|
const key = `${frameType}&${awsaner.large}`;
|
|
|
|
|
|
2024-05-08 16:57:55 +08:00
|
|
|
|
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}`;
|
2024-05-09 12:57:10 +08:00
|
|
|
|
|
2024-02-28 09:34:41 +08:00
|
|
|
|
return projectList[key]; // 匹配选择内容
|
2023-12-22 17:38:13 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 从仓库clone项目
|
|
|
|
|
*/
|
2023-12-22 21:46:45 +08:00
|
|
|
|
async downloadProject(targetPath, key, name) {
|
2024-03-01 15:48:53 +08:00
|
|
|
|
const spinner = ora('由于无法输出子进程所以看不到下载进度\n下载中...\n').start();
|
2023-12-22 17:38:13 +08:00
|
|
|
|
|
2023-12-22 21:46:45 +08:00
|
|
|
|
try {
|
|
|
|
|
await gitClone(key, name, { checkout: 'master' });
|
|
|
|
|
spinner.succeed('😄下载成功');
|
|
|
|
|
// 如果有git,删除原有的git
|
|
|
|
|
if (fs.existsSync(targetPath, '.git')) {
|
|
|
|
|
fs.remove(path.join(targetPath, '.git'));
|
|
|
|
|
}
|
2024-02-28 09:34:41 +08:00
|
|
|
|
|
2023-12-22 21:46:45 +08:00
|
|
|
|
const overText = `
|
2024-05-10 15:43:33 +08:00
|
|
|
|
⚓ 1. vue大屏默认pinia仓库,安装Vue-ECharts,使用rem、vwvh、rem+vwvh、scale布局
|
2024-05-11 09:06:20 +08:00
|
|
|
|
⚓ 2. vue开发模版使用vite
|
|
|
|
|
⚓ 3. 后台模板使用vite,,三种版本可以选择
|
2024-05-10 15:43:33 +08:00
|
|
|
|
⚓ 4. React模板3种方式
|
|
|
|
|
⚓ 5. Java单体开发模版
|
|
|
|
|
⚓ 6. Java微服务开发模版
|
2023-12-22 17:38:13 +08:00
|
|
|
|
|
2024-05-10 15:43:33 +08:00
|
|
|
|
📄 请查看 README.md...
|
2023-12-22 17:38:13 +08:00
|
|
|
|
|
2024-05-10 15:43:33 +08:00
|
|
|
|
🎉 成功创建项目 ${name}
|
|
|
|
|
👉 快速使用编辑器或命令行开始开发吧`;
|
2023-12-22 21:46:45 +08:00
|
|
|
|
console.log(overText);
|
|
|
|
|
console.log(chalk.whiteBright('Happy hacking!'));
|
|
|
|
|
} catch (error) {
|
|
|
|
|
spinner.fail('😭下载失败,请稍后重试');
|
|
|
|
|
}
|
2023-12-22 17:38:13 +08:00
|
|
|
|
},
|
|
|
|
|
};
|