// 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(); }); } }