ylyx-cli 1.0.14 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/README.md +4 -0
  2. package/bin/ylyx.js +168 -168
  3. package/lib/config.js +283 -299
  4. package/lib/deploy.js +529 -415
  5. package/lib/generator.js +192 -192
  6. package/lib/index.js +113 -113
  7. package/lib/interactive.js +87 -87
  8. package/lib/remote.js +179 -179
  9. package/lib/template.js +174 -174
  10. package/lib/utils.js +148 -148
  11. package/package.json +5 -5
  12. package/templates/react-app/files/README.md +23 -23
  13. package/templates/react-app/files/package.json +28 -28
  14. package/templates/react-app/files/public/index.html +11 -11
  15. package/templates/react-app/files/src/App.css +15 -15
  16. package/templates/react-app/files/src/App.js +15 -15
  17. package/templates/react-app/files/src/index.css +10 -10
  18. package/templates/react-app/files/src/index.js +11 -11
  19. package/templates/react-app/template.json +11 -11
  20. package/templates/react-component/files/Component.module.css +5 -5
  21. package/templates/react-component/files/Component.tsx +31 -31
  22. package/templates/react-component/files/index.ts +2 -2
  23. package/templates/react-component/template.json +48 -48
  24. package/templates/vue-app/files/.editorconfig +14 -14
  25. package/templates/vue-app/files/.env.development +21 -21
  26. package/templates/vue-app/files/.env.production +18 -18
  27. package/templates/vue-app/files/.eslintignore +5 -5
  28. package/templates/vue-app/files/.eslintrc.js +267 -267
  29. package/templates/vue-app/files/.prettierignore +11 -11
  30. package/templates/vue-app/files/.travis.yml +5 -5
  31. package/templates/vue-app/files/.vscode/extensions.json +7 -7
  32. package/templates/vue-app/files/.vscode/settings.json +39 -39
  33. package/templates/vue-app/files/LICENSE +191 -191
  34. package/templates/vue-app/files/README.md +87 -87
  35. package/templates/vue-app/files/babel.config.js +11 -11
  36. package/templates/vue-app/files/jest.config.js +24 -24
  37. package/templates/vue-app/files/package.json +136 -136
  38. package/templates/vue-app/files/plopfile.js +7 -7
  39. package/templates/vue-app/files/postcss.config.js +5 -5
  40. package/templates/vue-app/files/public/default.js +25 -25
  41. package/templates/vue-app/files/public/index.html +26 -26
  42. package/templates/vue-app/files/src/App.vue +54 -54
  43. package/templates/vue-app/files/src/api/bigDataV/index.js +198 -198
  44. package/templates/vue-app/files/src/api/data.js +42 -42
  45. package/templates/vue-app/files/src/api/dataArchive/index.js +186 -186
  46. package/templates/vue-app/files/src/api/generator/genConfig.js +16 -16
  47. package/templates/vue-app/files/src/api/generator/generator.js +32 -32
  48. package/templates/vue-app/files/src/api/indexManagement/index.js +39 -39
  49. package/templates/vue-app/files/src/api/institutionMonitor/index.js +396 -396
  50. package/templates/vue-app/files/src/api/institutionSet/index.js +120 -120
  51. package/templates/vue-app/files/src/api/login.js +44 -44
  52. package/templates/vue-app/files/src/api/selfStatistics/index.js +50 -50
  53. package/templates/vue-app/files/src/api/system/code.js +15 -15
  54. package/templates/vue-app/files/src/api/system/dict.js +34 -34
  55. package/templates/vue-app/files/src/api/system/dictDetail.js +52 -52
  56. package/templates/vue-app/files/src/api/system/equipment.js +35 -35
  57. package/templates/vue-app/files/src/api/system/examManage.js +49 -49
  58. package/templates/vue-app/files/src/api/system/examProject.js +48 -48
  59. package/templates/vue-app/files/src/api/system/hosModel.js +35 -35
  60. package/templates/vue-app/files/src/api/system/hospital.js +88 -88
  61. package/templates/vue-app/files/src/api/system/job.js +40 -40
  62. package/templates/vue-app/files/src/api/system/menu.js +67 -67
  63. package/templates/vue-app/files/src/api/system/model.js +42 -42
  64. package/templates/vue-app/files/src/api/system/risConfig.js +9 -9
  65. package/templates/vue-app/files/src/api/system/role.js +64 -64
  66. package/templates/vue-app/files/src/api/system/sysSet.js +19 -19
  67. package/templates/vue-app/files/src/api/system/timing.js +41 -41
  68. package/templates/vue-app/files/src/api/system/user.js +121 -121
  69. package/templates/vue-app/files/src/api/tools/alipay.js +25 -25
  70. package/templates/vue-app/files/src/api/tools/email.js +24 -24
  71. package/templates/vue-app/files/src/api/tools/localStorage.js +27 -27
  72. package/templates/vue-app/files/src/api/tools/qiniu.js +40 -40
  73. package/templates/vue-app/files/src/assets/css/font-awesome.css +2342 -2342
  74. package/templates/vue-app/files/src/assets/css/font-awesome.min.css +2336 -2336
  75. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.svg +2671 -2671
  76. package/templates/vue-app/files/src/assets/icons/index.js +9 -9
  77. package/templates/vue-app/files/src/assets/icons/svg/hospital.svg +1 -1
  78. package/templates/vue-app/files/src/assets/icons/svg/hospital1.svg +1 -1
  79. package/templates/vue-app/files/src/assets/icons/svg/loginOne.svg +35 -35
  80. package/templates/vue-app/files/src/assets/icons/svg/loginOneWhite.svg +19 -19
  81. package/templates/vue-app/files/src/assets/icons/svg/loginOr.svg +93 -93
  82. package/templates/vue-app/files/src/assets/icons/svg/loginUp.svg +96 -96
  83. package/templates/vue-app/files/src/assets/icons/svg/monitor.svg +1 -1
  84. package/templates/vue-app/files/src/assets/icons/svg/offline.svg +1 -1
  85. package/templates/vue-app/files/src/assets/icons/svg/online.svg +1 -1
  86. package/templates/vue-app/files/src/assets/icons/svg/system.svg +1 -1
  87. package/templates/vue-app/files/src/assets/icons/svgo.yml +21 -21
  88. package/templates/vue-app/files/src/assets/styles/btn.scss +103 -103
  89. package/templates/vue-app/files/src/assets/styles/eladmin.scss +124 -124
  90. package/templates/vue-app/files/src/assets/styles/element-ui.scss +217 -217
  91. package/templates/vue-app/files/src/assets/styles/element-variables.scss +31 -31
  92. package/templates/vue-app/files/src/assets/styles/global.scss +73 -73
  93. package/templates/vue-app/files/src/assets/styles/index.scss +220 -220
  94. package/templates/vue-app/files/src/assets/styles/mixin.scss +60 -60
  95. package/templates/vue-app/files/src/assets/styles/publicStyle.scss +224 -224
  96. package/templates/vue-app/files/src/assets/styles/sidebar.scss +239 -239
  97. package/templates/vue-app/files/src/assets/styles/transition.scss +48 -48
  98. package/templates/vue-app/files/src/assets/styles/variables.scss +44 -44
  99. package/templates/vue-app/files/src/common/flexible.js +145 -145
  100. package/templates/vue-app/files/src/components/Breadcrumb/index.vue +87 -87
  101. package/templates/vue-app/files/src/components/Crud/CRUD.operation.vue +248 -248
  102. package/templates/vue-app/files/src/components/Crud/Pagination.vue +20 -20
  103. package/templates/vue-app/files/src/components/Crud/RR.operation.vue +39 -39
  104. package/templates/vue-app/files/src/components/Crud/UD.operation.vue +106 -106
  105. package/templates/vue-app/files/src/components/Crud/crud.js +907 -907
  106. package/templates/vue-app/files/src/components/Crud/user/UR.operation.vue +154 -154
  107. package/templates/vue-app/files/src/components/DateRangePicker/index.vue +42 -42
  108. package/templates/vue-app/files/src/components/DateRangePickerProhibitNext/index.vue +42 -42
  109. package/templates/vue-app/files/src/components/DateRangePickerProhibitTodayNext/index.vue +48 -48
  110. package/templates/vue-app/files/src/components/Dict/Dict.js +31 -31
  111. package/templates/vue-app/files/src/components/Dict/index.js +29 -29
  112. package/templates/vue-app/files/src/components/Doc/index.vue +16 -16
  113. package/templates/vue-app/files/src/components/Echarts/BarChart.vue +115 -115
  114. package/templates/vue-app/files/src/components/Echarts/Category.vue +768 -768
  115. package/templates/vue-app/files/src/components/Echarts/Funnel.vue +120 -120
  116. package/templates/vue-app/files/src/components/Echarts/Gauge.vue +74 -74
  117. package/templates/vue-app/files/src/components/Echarts/Graph.vue +101 -101
  118. package/templates/vue-app/files/src/components/Echarts/HeatMap.vue +301 -301
  119. package/templates/vue-app/files/src/components/Echarts/Line3D.vue +110 -110
  120. package/templates/vue-app/files/src/components/Echarts/PieChart.vue +84 -84
  121. package/templates/vue-app/files/src/components/Echarts/Point.vue +161 -161
  122. package/templates/vue-app/files/src/components/Echarts/RadarChart.vue +123 -123
  123. package/templates/vue-app/files/src/components/Echarts/Rich.vue +160 -160
  124. package/templates/vue-app/files/src/components/Echarts/Sankey.vue +114 -114
  125. package/templates/vue-app/files/src/components/Echarts/Scatter.vue +192 -192
  126. package/templates/vue-app/files/src/components/Echarts/Sunburst.vue +127 -127
  127. package/templates/vue-app/files/src/components/Echarts/ThemeRiver.vue +233 -233
  128. package/templates/vue-app/files/src/components/Echarts/WordCloud.vue +201 -201
  129. package/templates/vue-app/files/src/components/GithubCorner/index.vue +55 -55
  130. package/templates/vue-app/files/src/components/Hamburger/index.vue +44 -44
  131. package/templates/vue-app/files/src/components/HeaderSearch/index.vue +196 -196
  132. package/templates/vue-app/files/src/components/IconSelect/index.vue +74 -74
  133. package/templates/vue-app/files/src/components/IconSelect/requireIcons.js +10 -10
  134. package/templates/vue-app/files/src/components/Iframe/index.vue +30 -30
  135. package/templates/vue-app/files/src/components/JavaEdit/index.vue +78 -78
  136. package/templates/vue-app/files/src/components/Pagination/index.vue +100 -100
  137. package/templates/vue-app/files/src/components/PanThumb/index.vue +149 -149
  138. package/templates/vue-app/files/src/components/ParentView/index.vue +3 -3
  139. package/templates/vue-app/files/src/components/Permission/index.js +13 -13
  140. package/templates/vue-app/files/src/components/Permission/permission.js +21 -21
  141. package/templates/vue-app/files/src/components/RightPanel/index.vue +149 -149
  142. package/templates/vue-app/files/src/components/Screenfull/index.vue +60 -60
  143. package/templates/vue-app/files/src/components/SizeSelect/index.vue +60 -60
  144. package/templates/vue-app/files/src/components/SvgIcon/index.vue +66 -66
  145. package/templates/vue-app/files/src/components/ThemePicker/index.vue +177 -177
  146. package/templates/vue-app/files/src/components/UploadExcel/index.vue +149 -149
  147. package/templates/vue-app/files/src/components/WaterMark/setWaterMark.js +68 -68
  148. package/templates/vue-app/files/src/components/WaterMark/waterMark.vue +69 -69
  149. package/templates/vue-app/files/src/components/Xgplayer/index.vue +49 -49
  150. package/templates/vue-app/files/src/components/YamlEdit/index.vue +81 -81
  151. package/templates/vue-app/files/src/layout/components/AppMain.vue +67 -67
  152. package/templates/vue-app/files/src/layout/components/Navbar.vue +209 -209
  153. package/templates/vue-app/files/src/layout/components/Settings/index.vue +125 -125
  154. package/templates/vue-app/files/src/layout/components/Sidebar/FixiOSBug.js +26 -26
  155. package/templates/vue-app/files/src/layout/components/Sidebar/Item.vue +29 -29
  156. package/templates/vue-app/files/src/layout/components/Sidebar/Link.vue +35 -35
  157. package/templates/vue-app/files/src/layout/components/Sidebar/Logo.vue +93 -93
  158. package/templates/vue-app/files/src/layout/components/Sidebar/SidebarItem.vue +104 -104
  159. package/templates/vue-app/files/src/layout/components/Sidebar/index.vue +79 -79
  160. package/templates/vue-app/files/src/layout/components/TagsView/ScrollPane.vue +90 -90
  161. package/templates/vue-app/files/src/layout/components/TagsView/index.vue +299 -299
  162. package/templates/vue-app/files/src/layout/components/index.js +5 -5
  163. package/templates/vue-app/files/src/layout/index.vue +119 -119
  164. package/templates/vue-app/files/src/layout/mixin/ResizeHandler.js +45 -45
  165. package/templates/vue-app/files/src/main.js +89 -89
  166. package/templates/vue-app/files/src/mixins/crud.js +348 -348
  167. package/templates/vue-app/files/src/router/index.js +156 -156
  168. package/templates/vue-app/files/src/router/routers.js +203 -203
  169. package/templates/vue-app/files/src/settings.js +57 -57
  170. package/templates/vue-app/files/src/store/getters.js +29 -29
  171. package/templates/vue-app/files/src/store/index.js +25 -25
  172. package/templates/vue-app/files/src/store/modules/api.js +33 -33
  173. package/templates/vue-app/files/src/store/modules/app.js +55 -55
  174. package/templates/vue-app/files/src/store/modules/permission.js +79 -79
  175. package/templates/vue-app/files/src/store/modules/register.js +17 -17
  176. package/templates/vue-app/files/src/store/modules/settings.js +46 -46
  177. package/templates/vue-app/files/src/store/modules/tagsView.js +168 -168
  178. package/templates/vue-app/files/src/store/modules/user.js +119 -119
  179. package/templates/vue-app/files/src/utils/auth.js +18 -18
  180. package/templates/vue-app/files/src/utils/base64ToFile.js +27 -27
  181. package/templates/vue-app/files/src/utils/clipboard.js +36 -36
  182. package/templates/vue-app/files/src/utils/datetime.js +289 -289
  183. package/templates/vue-app/files/src/utils/getBlobFile.js +10 -10
  184. package/templates/vue-app/files/src/utils/getTime.js +29 -29
  185. package/templates/vue-app/files/src/utils/index.js +520 -520
  186. package/templates/vue-app/files/src/utils/permission.js +29 -29
  187. package/templates/vue-app/files/src/utils/pinyin.js +450 -450
  188. package/templates/vue-app/files/src/utils/request.js +139 -139
  189. package/templates/vue-app/files/src/utils/rsaEncrypt.js +37 -37
  190. package/templates/vue-app/files/src/utils/shortcuts.js +210 -210
  191. package/templates/vue-app/files/src/utils/upload.js +12 -12
  192. package/templates/vue-app/files/src/utils/validate.js +262 -262
  193. package/templates/vue-app/files/src/views/components/Echarts.vue +124 -124
  194. package/templates/vue-app/files/src/views/components/Editor.vue +75 -75
  195. package/templates/vue-app/files/src/views/components/MarkDown.vue +44 -44
  196. package/templates/vue-app/files/src/views/components/UVideo.vue +37 -37
  197. package/templates/vue-app/files/src/views/components/YamlEdit.vue +206 -206
  198. package/templates/vue-app/files/src/views/components/camera/camera.vue +115 -115
  199. package/templates/vue-app/files/src/views/components/camera/cameraTest.vue +158 -158
  200. package/templates/vue-app/files/src/views/components/excel/upload-excel.vue +41 -41
  201. package/templates/vue-app/files/src/views/components/icons/element-icons.js +74 -74
  202. package/templates/vue-app/files/src/views/components/icons/index.vue +106 -106
  203. package/templates/vue-app/files/src/views/components/icons/svg-icons.js +10 -10
  204. package/templates/vue-app/files/src/views/components/scroll/index.vue +107 -107
  205. package/templates/vue-app/files/src/views/components/scrollFull/index.vue +99 -99
  206. package/templates/vue-app/files/src/views/dashboard/LineChart.vue +138 -138
  207. package/templates/vue-app/files/src/views/dashboard/PanelGroup.vue +173 -173
  208. package/templates/vue-app/files/src/views/dashboard/mixins/resize.js +57 -57
  209. package/templates/vue-app/files/src/views/dataArchive/delTable.vue +354 -354
  210. package/templates/vue-app/files/src/views/dataArchive/exportDetail.vue +121 -121
  211. package/templates/vue-app/files/src/views/dataArchive/exportList.vue +160 -160
  212. package/templates/vue-app/files/src/views/dataArchive/index.vue +2104 -2104
  213. package/templates/vue-app/files/src/views/features/401.vue +83 -83
  214. package/templates/vue-app/files/src/views/features/404.vue +226 -226
  215. package/templates/vue-app/files/src/views/features/redirect.vue +12 -12
  216. package/templates/vue-app/files/src/views/generator/config.vue +348 -348
  217. package/templates/vue-app/files/src/views/generator/index.vue +143 -143
  218. package/templates/vue-app/files/src/views/generator/preview.vue +39 -39
  219. package/templates/vue-app/files/src/views/home.vue +80 -80
  220. package/templates/vue-app/files/src/views/indexManagement/index.vue +422 -422
  221. package/templates/vue-app/files/src/views/indexManagement/other.vue +286 -286
  222. package/templates/vue-app/files/src/views/institutionMonitor/components/LineChart.vue +191 -191
  223. package/templates/vue-app/files/src/views/institutionMonitor/index.scss +339 -339
  224. package/templates/vue-app/files/src/views/institutionMonitor/index.vue +1385 -1385
  225. package/templates/vue-app/files/src/views/institutionMonitor/mixins/resize.js +57 -57
  226. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/checkProjectCode.vue +267 -267
  227. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/imageAbnormalMonitor.vue +361 -361
  228. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/index.vue +686 -686
  229. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/leakageAnomaly.vue +270 -270
  230. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/moveMonitore.vue +114 -114
  231. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/qualityMonitore.vue +338 -338
  232. package/templates/vue-app/files/src/views/institutionSet/cloudSet.vue +534 -534
  233. package/templates/vue-app/files/src/views/institutionSet/index.vue +2550 -2550
  234. package/templates/vue-app/files/src/views/login.vue +243 -243
  235. package/templates/vue-app/files/src/views/qualityLogin.vue +280 -280
  236. package/templates/vue-app/files/src/views/selfStatistics/components/LineChart.vue +296 -296
  237. package/templates/vue-app/files/src/views/selfStatistics/hospitalDetail/index.vue +533 -533
  238. package/templates/vue-app/files/src/views/selfStatistics/index.scss +447 -447
  239. package/templates/vue-app/files/src/views/selfStatistics/index.vue +903 -903
  240. package/templates/vue-app/files/src/views/selfStatistics/mixins/resize.js +57 -57
  241. package/templates/vue-app/files/src/views/selfStatistics/monitorDetail/index.vue +285 -285
  242. package/templates/vue-app/files/src/views/selfStatistics/offlineDetail/index.vue +104 -104
  243. package/templates/vue-app/files/src/views/selfStatistics/selfActiveDetail/index.vue +104 -104
  244. package/templates/vue-app/files/src/views/selfStatistics/selfMonitorDetail/index.vue +420 -420
  245. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/setWaterMark.js +68 -68
  246. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/waterMark.vue +69 -69
  247. package/templates/vue-app/files/src/views/system/dept/index.vue +144 -144
  248. package/templates/vue-app/files/src/views/system/dict/dictDetail.vue +146 -146
  249. package/templates/vue-app/files/src/views/system/dict/index.vue +159 -159
  250. package/templates/vue-app/files/src/views/system/examModality/index.vue +174 -174
  251. package/templates/vue-app/files/src/views/system/examPart/index.vue +184 -184
  252. package/templates/vue-app/files/src/views/system/examProject/index.vue +321 -321
  253. package/templates/vue-app/files/src/views/system/examine/index.vue +66 -66
  254. package/templates/vue-app/files/src/views/system/job/index.vue +119 -119
  255. package/templates/vue-app/files/src/views/system/job/module/form.vue +72 -72
  256. package/templates/vue-app/files/src/views/system/job/module/header.vue +48 -48
  257. package/templates/vue-app/files/src/views/system/menu/index.vue +327 -327
  258. package/templates/vue-app/files/src/views/system/model/index.vue +285 -285
  259. package/templates/vue-app/files/src/views/system/role/index.vue +434 -434
  260. package/templates/vue-app/files/src/views/system/sysSet/index.vue +84 -84
  261. package/templates/vue-app/files/src/views/system/timing/index.vue +289 -289
  262. package/templates/vue-app/files/src/views/system/timing/log.vue +143 -143
  263. package/templates/vue-app/files/src/views/system/user/admin.vue +414 -414
  264. package/templates/vue-app/files/src/views/system/user/center/updateEmail.vue +146 -146
  265. package/templates/vue-app/files/src/views/system/user/center/updatePass.vue +168 -168
  266. package/templates/vue-app/files/src/views/system/user/center.vue +140 -140
  267. package/templates/vue-app/files/src/views/system/user/index.vue +972 -972
  268. package/templates/vue-app/files/src/views/systemSet/role/index.vue +314 -314
  269. package/templates/vue-app/files/src/views/systemSet/user/admin.vue +414 -414
  270. package/templates/vue-app/files/src/views/systemSet/user/center/updateEmail.vue +146 -146
  271. package/templates/vue-app/files/src/views/systemSet/user/center/updatePass.vue +115 -115
  272. package/templates/vue-app/files/src/views/systemSet/user/center.vue +351 -351
  273. package/templates/vue-app/files/src/views/systemSet/user/index.vue +928 -928
  274. package/templates/vue-app/files/src/views/tools/aliPay/config.vue +102 -102
  275. package/templates/vue-app/files/src/views/tools/aliPay/index.vue +48 -48
  276. package/templates/vue-app/files/src/views/tools/aliPay/toPay.vue +91 -91
  277. package/templates/vue-app/files/src/views/tools/email/config.vue +91 -91
  278. package/templates/vue-app/files/src/views/tools/email/index.vue +42 -42
  279. package/templates/vue-app/files/src/views/tools/email/send.vue +159 -159
  280. package/templates/vue-app/files/src/views/tools/storage/index.vue +35 -35
  281. package/templates/vue-app/files/src/views/tools/storage/local/index.vue +207 -207
  282. package/templates/vue-app/files/src/views/tools/storage/qiniu/form.vue +108 -108
  283. package/templates/vue-app/files/src/views/tools/storage/qiniu/index.vue +241 -241
  284. package/templates/vue-app/files/src/views/tools/swagger/index.vue +14 -14
  285. package/templates/vue-app/files/vue.config.js +173 -173
  286. package/templates/vue-app/template.json +29 -29
package/lib/template.js CHANGED
@@ -1,174 +1,174 @@
1
- const fs = require('fs-extra');
2
- const path = require('path');
3
- const { getTemplatesDir, log } = require('./utils');
4
-
5
- /**
6
- * 获取所有模板列表
7
- */
8
- function listTemplates(shouldPrint = true) {
9
- const templatesDir = getTemplatesDir();
10
-
11
- if (!fs.existsSync(templatesDir)) {
12
- if (shouldPrint) {
13
- log.warn(`模板目录不存在: ${templatesDir}`);
14
- log.info('请先创建 templates 目录并添加模板');
15
- }
16
- return [];
17
- }
18
-
19
- const items = fs.readdirSync(templatesDir, { withFileTypes: true });
20
- const templates = items
21
- .filter((item) => item.isDirectory())
22
- .map((item) => {
23
- const templatePath = path.join(templatesDir, item.name);
24
- const configPath = path.join(templatePath, 'template.json');
25
-
26
- let config = {};
27
- if (fs.existsSync(configPath)) {
28
- try {
29
- config = fs.readJsonSync(configPath);
30
- } catch (e) {
31
- // 忽略配置读取错误
32
- }
33
- }
34
-
35
- return {
36
- name: item.name,
37
- path: templatePath,
38
- config,
39
- };
40
- });
41
-
42
- if (shouldPrint) {
43
- if (templates.length === 0) {
44
- log.warn('暂无可用模板');
45
- return [];
46
- }
47
-
48
- console.log('\n可用模板列表:\n');
49
- templates.forEach((template, index) => {
50
- const desc = template.config.description || '无描述';
51
- const version = template.config.version || '1.0.0';
52
- console.log(` ${index + 1}. ${template.name} (v${version})`);
53
- console.log(` ${desc}\n`);
54
- });
55
- }
56
-
57
- return templates;
58
- }
59
-
60
- /**
61
- * 获取模板信息
62
- */
63
- function getTemplateInfo(templateName) {
64
- const templatesDir = getTemplatesDir();
65
- const templatePath = path.join(templatesDir, templateName);
66
-
67
- if (!fs.existsSync(templatePath)) {
68
- log.error(`模板不存在: ${templateName}`);
69
- return null;
70
- }
71
-
72
- const configPath = path.join(templatePath, 'template.json');
73
- let config = {};
74
-
75
- if (fs.existsSync(configPath)) {
76
- try {
77
- config = fs.readJsonSync(configPath);
78
- } catch (e) {
79
- log.error(`读取模板配置失败: ${e.message}`);
80
- return null;
81
- }
82
- } else {
83
- log.warn('模板配置文件不存在');
84
- }
85
-
86
- console.log(`\n模板信息: ${templateName}\n`);
87
- console.log(` 名称: ${config.name || templateName}`);
88
- console.log(` 版本: ${config.version || '1.0.0'}`);
89
- console.log(` 描述: ${config.description || '无描述'}`);
90
-
91
- if (config.variables && Object.keys(config.variables).length > 0) {
92
- console.log(`\n 变量:`);
93
- Object.entries(config.variables).forEach(([key, value]) => {
94
- const type = value.type || 'string';
95
- const desc = value.message || value.description || '';
96
- const defaultValue = value.default !== undefined ? ` (默认: ${value.default})` : '';
97
- console.log(` - ${key} (${type})${defaultValue}: ${desc}`);
98
- });
99
- }
100
-
101
- console.log('');
102
- return config;
103
- }
104
-
105
- /**
106
- * 获取模板配置
107
- */
108
- function getTemplateConfig(templateName) {
109
- const templatesDir = getTemplatesDir();
110
- const templatePath = path.join(templatesDir, templateName);
111
-
112
- if (!fs.existsSync(templatePath)) {
113
- // 如果本地不存在,尝试检查是否是远程模板格式
114
- // 格式: owner/repo 或完整的 Git URL
115
- if (templateName.includes('/') || templateName.includes('://') || templateName.includes('@')) {
116
- throw new Error(`模板不存在: ${templateName}\n提示: 使用 'ylyx install ${templateName}' 安装远程模板`);
117
- }
118
- throw new Error(`模板不存在: ${templateName}`);
119
- }
120
-
121
- const configPath = path.join(templatePath, 'template.json');
122
- let config = {};
123
-
124
- if (fs.existsSync(configPath)) {
125
- try {
126
- config = fs.readJsonSync(configPath);
127
- } catch (e) {
128
- throw new Error(`读取模板配置失败: ${e.message}`);
129
- }
130
- }
131
-
132
- return {
133
- ...config,
134
- path: templatePath,
135
- };
136
- }
137
-
138
- /**
139
- * 添加模板(复制模板目录)
140
- */
141
- function addTemplate(templateName, sourcePath) {
142
- const templatesDir = getTemplatesDir();
143
- const targetPath = path.join(templatesDir, templateName);
144
-
145
- // 确保模板目录存在
146
- fs.ensureDirSync(templatesDir);
147
-
148
- // 检查源路径是否存在
149
- if (!fs.existsSync(sourcePath)) {
150
- log.error(`源路径不存在: ${sourcePath}`);
151
- return;
152
- }
153
-
154
- // 检查目标路径是否已存在
155
- if (fs.existsSync(targetPath)) {
156
- log.warn(`模板已存在: ${templateName}`);
157
- log.info('如需更新,请先删除现有模板');
158
- return;
159
- }
160
-
161
- try {
162
- fs.copySync(sourcePath, targetPath);
163
- log.success(`模板添加成功: ${templateName}`);
164
- } catch (e) {
165
- log.error(`添加模板失败: ${e.message}`);
166
- }
167
- }
168
-
169
- module.exports = {
170
- listTemplates,
171
- getTemplateInfo,
172
- getTemplateConfig,
173
- addTemplate,
174
- };
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const { getTemplatesDir, log } = require('./utils');
4
+
5
+ /**
6
+ * 获取所有模板列表
7
+ */
8
+ function listTemplates(shouldPrint = true) {
9
+ const templatesDir = getTemplatesDir();
10
+
11
+ if (!fs.existsSync(templatesDir)) {
12
+ if (shouldPrint) {
13
+ log.warn(`模板目录不存在: ${templatesDir}`);
14
+ log.info('请先创建 templates 目录并添加模板');
15
+ }
16
+ return [];
17
+ }
18
+
19
+ const items = fs.readdirSync(templatesDir, { withFileTypes: true });
20
+ const templates = items
21
+ .filter((item) => item.isDirectory())
22
+ .map((item) => {
23
+ const templatePath = path.join(templatesDir, item.name);
24
+ const configPath = path.join(templatePath, 'template.json');
25
+
26
+ let config = {};
27
+ if (fs.existsSync(configPath)) {
28
+ try {
29
+ config = fs.readJsonSync(configPath);
30
+ } catch (e) {
31
+ // 忽略配置读取错误
32
+ }
33
+ }
34
+
35
+ return {
36
+ name: item.name,
37
+ path: templatePath,
38
+ config,
39
+ };
40
+ });
41
+
42
+ if (shouldPrint) {
43
+ if (templates.length === 0) {
44
+ log.warn('暂无可用模板');
45
+ return [];
46
+ }
47
+
48
+ console.log('\n可用模板列表:\n');
49
+ templates.forEach((template, index) => {
50
+ const desc = template.config.description || '无描述';
51
+ const version = template.config.version || '1.0.0';
52
+ console.log(` ${index + 1}. ${template.name} (v${version})`);
53
+ console.log(` ${desc}\n`);
54
+ });
55
+ }
56
+
57
+ return templates;
58
+ }
59
+
60
+ /**
61
+ * 获取模板信息
62
+ */
63
+ function getTemplateInfo(templateName) {
64
+ const templatesDir = getTemplatesDir();
65
+ const templatePath = path.join(templatesDir, templateName);
66
+
67
+ if (!fs.existsSync(templatePath)) {
68
+ log.error(`模板不存在: ${templateName}`);
69
+ return null;
70
+ }
71
+
72
+ const configPath = path.join(templatePath, 'template.json');
73
+ let config = {};
74
+
75
+ if (fs.existsSync(configPath)) {
76
+ try {
77
+ config = fs.readJsonSync(configPath);
78
+ } catch (e) {
79
+ log.error(`读取模板配置失败: ${e.message}`);
80
+ return null;
81
+ }
82
+ } else {
83
+ log.warn('模板配置文件不存在');
84
+ }
85
+
86
+ console.log(`\n模板信息: ${templateName}\n`);
87
+ console.log(` 名称: ${config.name || templateName}`);
88
+ console.log(` 版本: ${config.version || '1.0.0'}`);
89
+ console.log(` 描述: ${config.description || '无描述'}`);
90
+
91
+ if (config.variables && Object.keys(config.variables).length > 0) {
92
+ console.log(`\n 变量:`);
93
+ Object.entries(config.variables).forEach(([key, value]) => {
94
+ const type = value.type || 'string';
95
+ const desc = value.message || value.description || '';
96
+ const defaultValue = value.default !== undefined ? ` (默认: ${value.default})` : '';
97
+ console.log(` - ${key} (${type})${defaultValue}: ${desc}`);
98
+ });
99
+ }
100
+
101
+ console.log('');
102
+ return config;
103
+ }
104
+
105
+ /**
106
+ * 获取模板配置
107
+ */
108
+ function getTemplateConfig(templateName) {
109
+ const templatesDir = getTemplatesDir();
110
+ const templatePath = path.join(templatesDir, templateName);
111
+
112
+ if (!fs.existsSync(templatePath)) {
113
+ // 如果本地不存在,尝试检查是否是远程模板格式
114
+ // 格式: owner/repo 或完整的 Git URL
115
+ if (templateName.includes('/') || templateName.includes('://') || templateName.includes('@')) {
116
+ throw new Error(`模板不存在: ${templateName}\n提示: 使用 'ylyx install ${templateName}' 安装远程模板`);
117
+ }
118
+ throw new Error(`模板不存在: ${templateName}`);
119
+ }
120
+
121
+ const configPath = path.join(templatePath, 'template.json');
122
+ let config = {};
123
+
124
+ if (fs.existsSync(configPath)) {
125
+ try {
126
+ config = fs.readJsonSync(configPath);
127
+ } catch (e) {
128
+ throw new Error(`读取模板配置失败: ${e.message}`);
129
+ }
130
+ }
131
+
132
+ return {
133
+ ...config,
134
+ path: templatePath,
135
+ };
136
+ }
137
+
138
+ /**
139
+ * 添加模板(复制模板目录)
140
+ */
141
+ function addTemplate(templateName, sourcePath) {
142
+ const templatesDir = getTemplatesDir();
143
+ const targetPath = path.join(templatesDir, templateName);
144
+
145
+ // 确保模板目录存在
146
+ fs.ensureDirSync(templatesDir);
147
+
148
+ // 检查源路径是否存在
149
+ if (!fs.existsSync(sourcePath)) {
150
+ log.error(`源路径不存在: ${sourcePath}`);
151
+ return;
152
+ }
153
+
154
+ // 检查目标路径是否已存在
155
+ if (fs.existsSync(targetPath)) {
156
+ log.warn(`模板已存在: ${templateName}`);
157
+ log.info('如需更新,请先删除现有模板');
158
+ return;
159
+ }
160
+
161
+ try {
162
+ fs.copySync(sourcePath, targetPath);
163
+ log.success(`模板添加成功: ${templateName}`);
164
+ } catch (e) {
165
+ log.error(`添加模板失败: ${e.message}`);
166
+ }
167
+ }
168
+
169
+ module.exports = {
170
+ listTemplates,
171
+ getTemplateInfo,
172
+ getTemplateConfig,
173
+ addTemplate,
174
+ };
package/lib/utils.js CHANGED
@@ -1,148 +1,148 @@
1
- const path = require('path');
2
- const fs = require('fs-extra');
3
- const chalk = require('chalk');
4
-
5
- /**
6
- * 转换为驼峰命名
7
- */
8
- function camelCase(str) {
9
- return str
10
- .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
11
- return index === 0 ? word.toLowerCase() : word.toUpperCase();
12
- })
13
- .replace(/\s+/g, '');
14
- }
15
-
16
- /**
17
- * 转换为帕斯卡命名
18
- */
19
- function pascalCase(str) {
20
- return str
21
- .replace(/(?:^\w|[A-Z]|\b\w)/g, (word) => {
22
- return word.toUpperCase();
23
- })
24
- .replace(/\s+/g, '');
25
- }
26
-
27
- /**
28
- * 转换为短横线命名
29
- */
30
- function kebabCase(str) {
31
- return str
32
- .replace(/([a-z])([A-Z])/g, '$1-$2')
33
- .replace(/[\s_]+/g, '-')
34
- .toLowerCase();
35
- }
36
-
37
- /**
38
- * 转换为下划线命名
39
- */
40
- function snakeCase(str) {
41
- return str
42
- .replace(/([a-z])([A-Z])/g, '$1_$2')
43
- .replace(/[\s-]+/g, '_')
44
- .toLowerCase();
45
- }
46
-
47
- /**
48
- * 获取模板目录路径
49
- */
50
- function getTemplatesDir() {
51
- const configPath = path.join(process.cwd(), '.ylyxrc.json');
52
- if (fs.existsSync(configPath)) {
53
- const config = fs.readJsonSync(configPath);
54
- if (config.templatesDir) {
55
- return path.resolve(process.cwd(), config.templatesDir);
56
- }
57
- }
58
-
59
- // 默认使用项目内的 templates 目录
60
- return path.join(__dirname, '../templates');
61
- }
62
-
63
- /**
64
- * 获取输出目录
65
- */
66
- function getOutputDir(customOutputDir) {
67
- if (customOutputDir) {
68
- return path.resolve(process.cwd(), customOutputDir);
69
- }
70
-
71
- const configPath = path.join(process.cwd(), '.ylyxrc.json');
72
- if (fs.existsSync(configPath)) {
73
- const config = fs.readJsonSync(configPath);
74
- if (config.outputDir) {
75
- return path.resolve(process.cwd(), config.outputDir);
76
- }
77
- }
78
-
79
- return process.cwd();
80
- }
81
-
82
- /**
83
- * 读取当前项目目录下的 .ylyxrc.json(安全:不存在返回 {},JSON 错误抛出)
84
- */
85
- function readProjectConfig() {
86
- const configPath = path.join(process.cwd(), '.ylyxrc.json');
87
- if (!fs.existsSync(configPath)) return {};
88
- try {
89
- return fs.readJsonSync(configPath);
90
- } catch (e) {
91
- throw new Error(`读取 .ylyxrc.json 失败,请确认它是有效 JSON:${e.message}`);
92
- }
93
- }
94
-
95
- /**
96
- * 注册 Handlebars 辅助函数
97
- */
98
- function registerHandlebarsHelpers(handlebars) {
99
- handlebars.registerHelper('camelCase', (str) => {
100
- return camelCase(str);
101
- });
102
-
103
- handlebars.registerHelper('pascalCase', (str) => {
104
- return pascalCase(str);
105
- });
106
-
107
- handlebars.registerHelper('kebabCase', (str) => {
108
- return kebabCase(str);
109
- });
110
-
111
- handlebars.registerHelper('snakeCase', (str) => {
112
- return snakeCase(str);
113
- });
114
-
115
- handlebars.registerHelper('upperCase', (str) => {
116
- return String(str).toUpperCase();
117
- });
118
-
119
- handlebars.registerHelper('lowerCase', (str) => {
120
- return String(str).toLowerCase();
121
- });
122
-
123
- handlebars.registerHelper('eq', (a, b) => {
124
- return a === b;
125
- });
126
- }
127
-
128
- /**
129
- * 日志输出
130
- */
131
- const log = {
132
- success: (msg) => console.log(chalk.green('✓'), msg),
133
- error: (msg) => console.error(chalk.red('✗'), msg),
134
- info: (msg) => console.log(chalk.blue('ℹ'), msg),
135
- warn: (msg) => console.log(chalk.yellow('⚠'), msg),
136
- };
137
-
138
- module.exports = {
139
- camelCase,
140
- pascalCase,
141
- kebabCase,
142
- snakeCase,
143
- getTemplatesDir,
144
- getOutputDir,
145
- readProjectConfig,
146
- registerHandlebarsHelpers,
147
- log,
148
- };
1
+ const path = require('path');
2
+ const fs = require('fs-extra');
3
+ const chalk = require('chalk');
4
+
5
+ /**
6
+ * 转换为驼峰命名
7
+ */
8
+ function camelCase(str) {
9
+ return str
10
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
11
+ return index === 0 ? word.toLowerCase() : word.toUpperCase();
12
+ })
13
+ .replace(/\s+/g, '');
14
+ }
15
+
16
+ /**
17
+ * 转换为帕斯卡命名
18
+ */
19
+ function pascalCase(str) {
20
+ return str
21
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word) => {
22
+ return word.toUpperCase();
23
+ })
24
+ .replace(/\s+/g, '');
25
+ }
26
+
27
+ /**
28
+ * 转换为短横线命名
29
+ */
30
+ function kebabCase(str) {
31
+ return str
32
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
33
+ .replace(/[\s_]+/g, '-')
34
+ .toLowerCase();
35
+ }
36
+
37
+ /**
38
+ * 转换为下划线命名
39
+ */
40
+ function snakeCase(str) {
41
+ return str
42
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
43
+ .replace(/[\s-]+/g, '_')
44
+ .toLowerCase();
45
+ }
46
+
47
+ /**
48
+ * 获取模板目录路径
49
+ */
50
+ function getTemplatesDir() {
51
+ const configPath = path.join(process.cwd(), '.ylyxrc.json');
52
+ if (fs.existsSync(configPath)) {
53
+ const config = fs.readJsonSync(configPath);
54
+ if (config.templatesDir) {
55
+ return path.resolve(process.cwd(), config.templatesDir);
56
+ }
57
+ }
58
+
59
+ // 默认使用项目内的 templates 目录
60
+ return path.join(__dirname, '../templates');
61
+ }
62
+
63
+ /**
64
+ * 获取输出目录
65
+ */
66
+ function getOutputDir(customOutputDir) {
67
+ if (customOutputDir) {
68
+ return path.resolve(process.cwd(), customOutputDir);
69
+ }
70
+
71
+ const configPath = path.join(process.cwd(), '.ylyxrc.json');
72
+ if (fs.existsSync(configPath)) {
73
+ const config = fs.readJsonSync(configPath);
74
+ if (config.outputDir) {
75
+ return path.resolve(process.cwd(), config.outputDir);
76
+ }
77
+ }
78
+
79
+ return process.cwd();
80
+ }
81
+
82
+ /**
83
+ * 读取当前项目目录下的 .ylyxrc.json(安全:不存在返回 {},JSON 错误抛出)
84
+ */
85
+ function readProjectConfig() {
86
+ const configPath = path.join(process.cwd(), '.ylyxrc.json');
87
+ if (!fs.existsSync(configPath)) return {};
88
+ try {
89
+ return fs.readJsonSync(configPath);
90
+ } catch (e) {
91
+ throw new Error(`读取 .ylyxrc.json 失败,请确认它是有效 JSON:${e.message}`);
92
+ }
93
+ }
94
+
95
+ /**
96
+ * 注册 Handlebars 辅助函数
97
+ */
98
+ function registerHandlebarsHelpers(handlebars) {
99
+ handlebars.registerHelper('camelCase', (str) => {
100
+ return camelCase(str);
101
+ });
102
+
103
+ handlebars.registerHelper('pascalCase', (str) => {
104
+ return pascalCase(str);
105
+ });
106
+
107
+ handlebars.registerHelper('kebabCase', (str) => {
108
+ return kebabCase(str);
109
+ });
110
+
111
+ handlebars.registerHelper('snakeCase', (str) => {
112
+ return snakeCase(str);
113
+ });
114
+
115
+ handlebars.registerHelper('upperCase', (str) => {
116
+ return String(str).toUpperCase();
117
+ });
118
+
119
+ handlebars.registerHelper('lowerCase', (str) => {
120
+ return String(str).toLowerCase();
121
+ });
122
+
123
+ handlebars.registerHelper('eq', (a, b) => {
124
+ return a === b;
125
+ });
126
+ }
127
+
128
+ /**
129
+ * 日志输出
130
+ */
131
+ const log = {
132
+ success: (msg) => console.log(chalk.green('✓'), msg),
133
+ error: (msg) => console.error(chalk.red('✗'), msg),
134
+ info: (msg) => console.log(chalk.blue('ℹ'), msg),
135
+ warn: (msg) => console.log(chalk.yellow('⚠'), msg),
136
+ };
137
+
138
+ module.exports = {
139
+ camelCase,
140
+ pascalCase,
141
+ kebabCase,
142
+ snakeCase,
143
+ getTemplatesDir,
144
+ getOutputDir,
145
+ readProjectConfig,
146
+ registerHandlebarsHelpers,
147
+ log,
148
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ylyx-cli",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "description": "公司内部代码生成模板脚手架工具,支持快速生成项目初始结构和代码模板",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -44,16 +44,16 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "archiver": "^5.3.2",
47
- "commander": "^11.1.0",
48
- "inquirer": "^8.2.6",
49
47
  "chalk": "^4.1.2",
48
+ "commander": "^11.1.0",
50
49
  "fs-extra": "^11.2.0",
51
- "handlebars": "^4.7.8",
52
50
  "glob": "^10.3.10",
51
+ "handlebars": "^4.7.8",
52
+ "inquirer": "^8.2.6",
53
53
  "ora": "^5.4.1",
54
54
  "ssh2-sftp-client": "^9.0.4"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@types/node": "^20.10.0"
58
58
  }
59
- }
59
+ }