// eslint-disable-next-line @typescript-eslint/no-unused-vars import { exit, cd, exec } from 'shelljs'; import { existsSync, mkdirSync } from 'fs'; import { printMsg } from './common'; import { red } from 'chalk'; import { prompt } from 'inquirer'; import { FeatrueProject } from '../feature/FeatrueProject'; import { FeatrueList } from '../feature/FeatrueList'; export function createProjectFile (Pname:string) { // 判断文件是否存在 if (existsSync(Pname)) { printMsg(red(`${Pname}文件已存在`)); // 退出 exit(1); } // 创建文件夹 mkdirSync(Pname); } type Ptype = { ptype:string; } type featrue = { featrue:Array } export async function selectFeature ():Promise<{projectType:Ptype, featrueList:featrue}> { const projectType = await prompt([ { type: 'list', message: '请选择项目', name: 'ptype', choices: [ { name: 'vue', value: 'vue', checked: true, disabled: false, description: 'vue' }, { name: 'react', value: 'react', checked: true, disabled: false, description: 'react' }, { name: 'express', value: 'express', checked: true, disabled: false, description: 'express' } ] } ]); const featrueList = await prompt([ { type: 'checkbox', message: '请选择要实现的项目', name: 'featrue', choices: [ { name: 'eslint', value: 'eslint', checked: true, disabled: false, description: 'eslint' }, { name: 'commitizen', value: 'commitizen', checked: false, disabled: false, description: 'commitizen' }, { name: 'husky', value: 'husky', checked: true, disabled: false, description: 'husky' }, { name: 'ts', value: 'typescript', checked: false, disabled: false, description: 'typescript' } ] } ]); return { projectType, featrueList }; } export function initFeatrue (Pname:string, projectType:string, featrueList:Array) { // 1·cd 项目目录 并且 初始化package.json cd(Pname); // exec('npm init -y'); // 2·根据feature 实现对应的功能 // console.log(projectType, featrueList); // 创建一个类 参数为:根据项目类型创建项目 new FeatrueProject(projectType); // 根据功能实现队形的方法 new FeatrueList(projectType, featrueList); exec('npm init -y'); }