cli.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. const inquirer = require('inquirer');
  10. const fs = require('fs');
  11. const path = require('path');
  12. const ejs = require('ejs');
  13. // 读取json
  14. const list = JSON.parse(fs.readFileSync('./generate-code/pc_menu_企业风管.json'));
  15. // 目标目录
  16. // const destDir = process.cwd();
  17. const destDir = path.join(process.cwd(), 'src/pages');
  18. //检查某个目录是否存在
  19. function hasFile(url, code) {
  20. const temp = path.join(url, `/${code}`);
  21. try {
  22. //检查某个目录是否存在
  23. fs.statSync(temp);
  24. return true;
  25. } catch (error) {
  26. return false;
  27. }
  28. }
  29. // 模板目录
  30. const tempDir = path.join(__dirname, 'templates');
  31. function writeFile(url, code) {
  32. if (!hasFile(url, code)) {
  33. return fs.promises.mkdir(temp);
  34. }
  35. return Promise.resolve();
  36. }
  37. list.forEach((el) => {
  38. const { code, children } = el;
  39. writeFile(destDir, code).then(() => {
  40. if (children) {
  41. children.forEach((item) => {
  42. writeFile(path.join(destDir, `/${code}`), item.code).then(() => {
  43. if (item.children) {
  44. item.children.forEach((e) => {
  45. writeFile(path.join(destDir, `/${code}/${item.code}`), e.code).then(() => {
  46. if (!hasFile(path.join(destDir, `/${code}/${item.code}`), 'index.vue')) {
  47. const obj = { code: e.code };
  48. // ejs.renderFile(tempDir, obj, (err, result) => {
  49. // if (err) throw err;
  50. // // fs.writeFileSync(path.join(destDir, `/${code}/${item.code}/${e.code}`), result);
  51. // });
  52. fs.writeFileSync(
  53. path.join(destDir, `/${code}/${item.code}/${e.code}/index.vue`),
  54. ''
  55. );
  56. }
  57. writeFile(path.join(destDir, `/${code}/${item.code}/${e.code}`), 'components');
  58. });
  59. });
  60. }
  61. });
  62. });
  63. }
  64. });
  65. });
  66. // console.log(list);
  67. // inquirer
  68. // .prompt([
  69. // {
  70. // type: 'input',
  71. // name: 'name',
  72. // message: 'Project name'
  73. // }`
  74. // ])
  75. // .then((ansers) => {
  76. // // console.log(ansers);
  77. // // 根据用户回答的结果生成文件
  78. // // 模板目录
  79. // const tempDir = path.join(__dirname, 'templates');
  80. // // 目标目录
  81. // const destDir = process.cwd();
  82. // // 将模板下的文件全部转换到目标下目录
  83. // fs.readdir(tempDir, (err, files) => {
  84. // if (err) throw err;
  85. // files.forEach((file) => {
  86. // // 通过目标引擎渲染文件
  87. // ejs.renderFile(path.join(tempDir, file), ansers, (err, result) => {
  88. // if (err) throw err;
  89. // // 将结果写入目标文件路径
  90. // // fs.writeFileSync(path.join(destDir, file), result);
  91. // });
  92. // });
  93. // });
  94. // });