85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
|
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);
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
};
|