cli.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #! /usr/bin/env node
  2. // Node Cli 应用入口文件必须要有这样的文件头
  3. // 如果是 Linux 或者 macos 系统还需要修改此文件的读写权限为 755
  4. // 具体是通过 chmod 755 cli.js 实现修改
  5. // console.log('working');
  6. // 脚手架的工作过程
  7. // 1.通过命令交互询问用户问题
  8. // 2.根据用户回答的结果生成文件
  9. // 在终端 执行 generate-code
  10. const inquirer = require('inquirer');
  11. const fs = require('fs');
  12. const path = require('path');
  13. const ejs = require('ejs');
  14. // 读取json
  15. const list = JSON.parse(fs.readFileSync('./generate-code/pc_menu_企业风管.json'));
  16. // 目标目录
  17. // const destDir = process.cwd();
  18. const destDir = path.join(process.cwd(), 'src');
  19. /*** ===================== 生成弹窗名枚举 ==================== ****/
  20. const enumPath = path.join(destDir, '/common/constants/modalNameEnum.ts');
  21. let name = `export enum ModalEnum {
  22. notice = 'notice', // 消息
  23. logout = 'logout', // 退出登录
  24. commomOrder = 'commom-order', // 下单通用界面
  25. detail = 'detail', // 详情`;
  26. function getModalEnum(arr, callback) {
  27. arr.forEach((el) => {
  28. const { code, title, children, type } = el;
  29. if (type === 2) {
  30. // 按钮类型
  31. fs.promises.readFile(enumPath).then((res) => {
  32. console.log(code);
  33. if (!name.includes(code)) {
  34. name += `
  35. ${code} = '${code}', // ${title}
  36. `;
  37. callback();
  38. }
  39. getModalEnum(children, callback);
  40. });
  41. } else {
  42. getModalEnum(children, callback);
  43. }
  44. });
  45. }
  46. getModalEnum(list, () => {
  47. const temp =
  48. name +
  49. `
  50. }`;
  51. // fs.unlink(enumPath, (err) => {
  52. // // !err && console.log('文件删除成功!');
  53. // });
  54. fs.writeFileSync(enumPath, temp, { flag: 'w+' }, (err) => {
  55. // !err && console.log('写入文件成功!');
  56. });
  57. });
  58. //检查某个目录是否存在
  59. function hasFile(url, code) {
  60. const temp = path.join(url, `/${code}`);
  61. try {
  62. //检查某个目录是否存在
  63. fs.statSync(temp);
  64. return true;
  65. } catch (error) {
  66. console.log(temp);
  67. console.log(error);
  68. return false;
  69. }
  70. }
  71. // 模板目录
  72. const tempDir = path.join(__dirname, 'templates');
  73. function writeFile(url, code) {
  74. if (!hasFile(url, code)) {
  75. const temp = path.join(url, `/${code}`);
  76. console.log(temp);
  77. return fs.promises.mkdir(temp);
  78. }
  79. return Promise.resolve(false);
  80. }
  81. // list.forEach((el) => {
  82. // const { code, children } = el;
  83. // writeFile(destDir, code).then(() => {
  84. // if (children) {
  85. // children.forEach((item) => {
  86. // writeFile(path.join(destDir, `/${code}`), item.code).then(() => {
  87. // if (item.children) {
  88. // item.children.forEach((e) => {
  89. // const path1 = `/${code}/${item.code}`;
  90. // writeFile(path.join(destDir, path1), e.code).then(() => {
  91. // const path2 = `${path1}/${e.code}`;
  92. // // index.vue
  93. // if (!hasFile(path.join(destDir, path2), 'index.vue')) {
  94. // const template = `
  95. // `;
  96. // fs.writeFileSync(path.join(destDir, `${path2}/index.vue`), template);
  97. // }
  98. // // components
  99. // writeFile(path.join(destDir, `${path2}`), 'components').then(() => {
  100. // if (e.children) {
  101. // const path3 = `${path2}/components`;
  102. // e.children.forEach((ele) => {
  103. // writeFile(path.join(destDir, path3), ele.code).then((res) => {
  104. // if (res) {
  105. // if (
  106. // !hasFile(
  107. // path.join(destDir, `${path3}/${ele.code}`),
  108. // 'index.vue'
  109. // )
  110. // ) {
  111. // const template = `
  112. // `;
  113. // fs.writeFileSync(
  114. // path.join(destDir, `${path3}${ele.code}/index.vue`),
  115. // template
  116. // ).then(res => {
  117. // if (res) {
  118. // }
  119. // }
  120. // }
  121. // }
  122. // });
  123. // });
  124. // }
  125. // });
  126. // });
  127. // });
  128. // }
  129. // });
  130. // });
  131. // }
  132. // });
  133. // });