#! /usr/bin/env node // Node Cli 应用入口文件必须要有这样的文件头 // 如果是 Linux 或者 macos 系统还需要修改此文件的读写权限为 755 // 具体是通过 chmod 755 cli.js 实现修改 // console.log('working'); // 脚手架的工作过程 // 1.通过命令交互询问用户问题 // 2.根据用户回答的结果生成文件 const inquirer = require('inquirer'); const fs = require('fs'); const path = require('path'); const ejs = require('ejs'); // 读取json const list = JSON.parse(fs.readFileSync('./generate-code/pc_menu_企业风管.json')); // 目标目录 // const destDir = process.cwd(); const destDir = path.join(process.cwd(), 'src/pages'); //检查某个目录是否存在 function hasFile(url, code) { const temp = path.join(url, `/${code}`); try { //检查某个目录是否存在 fs.statSync(temp); return true; } catch (error) { return false; } } // 模板目录 const tempDir = path.join(__dirname, 'templates'); function writeFile(url, code) { if (!hasFile(url, code)) { return fs.promises.mkdir(temp); } return Promise.resolve(); } list.forEach((el) => { const { code, children } = el; writeFile(destDir, code).then(() => { if (children) { children.forEach((item) => { writeFile(path.join(destDir, `/${code}`), item.code).then(() => { if (item.children) { item.children.forEach((e) => { writeFile(path.join(destDir, `/${code}/${item.code}`), e.code).then(() => { if (!hasFile(path.join(destDir, `/${code}/${item.code}`), 'index.vue')) { const obj = { code: e.code }; // ejs.renderFile(tempDir, obj, (err, result) => { // if (err) throw err; // // fs.writeFileSync(path.join(destDir, `/${code}/${item.code}/${e.code}`), result); // }); fs.writeFileSync( path.join(destDir, `/${code}/${item.code}/${e.code}/index.vue`), '' ); } writeFile(path.join(destDir, `/${code}/${item.code}/${e.code}`), 'components'); }); }); } }); }); } }); }); // console.log(list); // inquirer // .prompt([ // { // type: 'input', // name: 'name', // message: 'Project name' // }` // ]) // .then((ansers) => { // // console.log(ansers); // // 根据用户回答的结果生成文件 // // 模板目录 // const tempDir = path.join(__dirname, 'templates'); // // 目标目录 // const destDir = process.cwd(); // // 将模板下的文件全部转换到目标下目录 // fs.readdir(tempDir, (err, files) => { // if (err) throw err; // files.forEach((file) => { // // 通过目标引擎渲染文件 // ejs.renderFile(path.join(tempDir, file), ansers, (err, result) => { // if (err) throw err; // // 将结果写入目标文件路径 // // fs.writeFileSync(path.join(destDir, file), result); // }); // }); // }); // });