|
@@ -0,0 +1,104 @@
|
|
|
|
|
+#! /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');
|
|
|
|
|
+const { tmpdir } = require('os');
|
|
|
|
|
+const { createPartiallyEmittedExpression } = require('typescript');
|
|
|
|
|
+
|
|
|
|
|
+// 读取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) {
|
|
|
|
|
+ console.log(temp);
|
|
|
|
|
+ console.log(error);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 模板目录
|
|
|
|
|
+const tempDir = path.join(__dirname, 'templates');
|
|
|
|
|
+
|
|
|
|
|
+function writeFile(url, code) {
|
|
|
|
|
+ if (!hasFile(url, code)) {
|
|
|
|
|
+ const temp = path.join(url, `/${code}`);
|
|
|
|
|
+ console.log(temp);
|
|
|
|
|
+ return fs.promises.mkdir(temp);
|
|
|
|
|
+ }
|
|
|
|
|
+ return Promise.resolve(false);
|
|
|
|
|
+}
|
|
|
|
|
+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) => {
|
|
|
|
|
+ const path1 = `/${code}/${item.code}`;
|
|
|
|
|
+ writeFile(path.join(destDir, path1), e.code).then(() => {
|
|
|
|
|
+ const path2 = `${path1}/${e.code}`;
|
|
|
|
|
+ // index.vue
|
|
|
|
|
+ if (!hasFile(path.join(destDir, path2), 'index.vue')) {
|
|
|
|
|
+ const template = `
|
|
|
|
|
+
|
|
|
|
|
+ `;
|
|
|
|
|
+ fs.writeFileSync(path.join(destDir, `${path2}/index.vue`), template);
|
|
|
|
|
+ }
|
|
|
|
|
+ // components
|
|
|
|
|
+ writeFile(path.join(destDir, `${path2}`), 'components').then(() => {
|
|
|
|
|
+ if (e.children) {
|
|
|
|
|
+ const path3 = `${path2}/components`;
|
|
|
|
|
+ e.children.forEach((ele) => {
|
|
|
|
|
+ writeFile(path.join(destDir, path3), ele.code).then((res) => {
|
|
|
|
|
+ if (res) {
|
|
|
|
|
+ if (
|
|
|
|
|
+ !hasFile(
|
|
|
|
|
+ path.join(destDir, `${path3}/${ele.code}`),
|
|
|
|
|
+ 'index.vue'
|
|
|
|
|
+ )
|
|
|
|
|
+ ) {
|
|
|
|
|
+ const template = `
|
|
|
|
|
+ `;
|
|
|
|
|
+ fs.writeFileSync(
|
|
|
|
|
+ path.join(destDir, `${path3}${ele.code}/index.vue`),
|
|
|
|
|
+ template
|
|
|
|
|
+ ).then(res => {
|
|
|
|
|
+ if (res) {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+});
|