// generatePage.js 文件,放置生成组件的代码 const chalk = require('chalk') const path = require('path') const fs = require('fs') const resolve = (...file) => path.resolve(__dirname, ...file) const log = message => console.log(chalk.yellow(`${message}`)) const successLog = message => console.log(chalk.green(`${message}`)) const errorLog = error => console.log(chalk.red(`${error}`)) const { indexPage, addEditPage, servicePage // modelPage } = require('./template') const generateFile = (path, data) => { if (fs.existsSync(path)) { errorLog(`${path}文件已存在`) return } return new Promise((resolve, reject) => { fs.writeFile(path, data, 'utf8', err => { if (err) { errorLog(err.message) reject(err) } else { resolve(true) } }) }) } log('请输入要生成的页面名称:') let componentName = '' process.stdin.on('data', async chunk => { const inputName = String(chunk) .trim() .toString() // 页面组件目录路径 const componentDirectory = resolve('../src/views', inputName) // apis-service 目录路径 const apisServiceDirectory = resolve('../src/apis/service', inputName) // // apis-model 目录路径 // const apisModelDirectory = resolve("../src/apis/model", inputName); // vue组件路径--首页--列表页 const listTablePath = resolve(componentDirectory, 'index.vue') // vue组件路径--添加修改详情 const addEditPath = resolve(componentDirectory, 'addEdit.vue') // service文件路径 const servicePath = resolve(apisServiceDirectory, 'index.js') // // model文件路径 // const moldePath = resolve(apisModelDirectory, "index.js"); // views页面文件目录 const hasComponentDirectory = fs.existsSync(componentDirectory) if (hasComponentDirectory) { errorLog(`${inputName}组件目录已存在,请重新输入`) return } else { log(`正在生成 component 目录 ${componentDirectory}`) await dotExistDirectoryCreate(componentDirectory) } // service文件目录 const hasService = fs.existsSync(apisServiceDirectory) if (hasService) { errorLog(`${inputName}service目录已存在,请重新输入`) return } else { log(`正在生成 apis/service 目录 ${apisServiceDirectory}`) await dotExistDirectoryCreate(apisServiceDirectory) } // model 文件目录 // const hasModel = fs.existsSync(apisModelDirectory); // if (hasModel) { // errorLog(`${inputName}组件目录已存在,请重新输入`); // return; // } else { // log(`正在生成 apis/model 目录 ${apisModelDirectory}`); // await dotExistDirectoryCreate(apisModelDirectory); // } try { if (inputName.includes('/')) { const inputArr = inputName.split('/') componentName = inputArr[inputArr.length - 1] } else { componentName = inputName } log(`正在生成 views-列表 文件 ${listTablePath}`) await generateFile(listTablePath, indexPage(inputName, componentName)) log(`正在生成 views-添加修改详情 文件 ${addEditPath}`) await generateFile(addEditPath, addEditPage(inputName, componentName)) log(`正在生成 apis-service 文件 ${servicePath}`) await generateFile(servicePath, servicePage) // log(`正在生成 apis-model 文件 ${moldePath}`); // await generateFile(moldePath, modelPage(componentName)); successLog('生成成功') } catch (e) { errorLog(e.message) } process.stdin.emit('end') }) process.stdin.on('end', () => { log('exit') process.exit() }) function dotExistDirectoryCreate(directory) { return new Promise(resolve => { mkdirs(directory, function() { resolve(true) }) }) } // 递归创建目录 function mkdirs(directory, callback) { var exists = fs.existsSync(directory) if (exists) { callback() } else { mkdirs(path.dirname(directory), function() { fs.mkdirSync(directory) callback() }) } }