ylyx-cli 1.0.15 → 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 (285) hide show
  1. package/bin/ylyx.js +168 -168
  2. package/lib/config.js +283 -299
  3. package/lib/deploy.js +529 -495
  4. package/lib/generator.js +192 -192
  5. package/lib/index.js +113 -113
  6. package/lib/interactive.js +87 -87
  7. package/lib/remote.js +179 -179
  8. package/lib/template.js +174 -174
  9. package/lib/utils.js +148 -148
  10. package/package.json +5 -5
  11. package/templates/react-app/files/README.md +23 -23
  12. package/templates/react-app/files/package.json +28 -28
  13. package/templates/react-app/files/public/index.html +11 -11
  14. package/templates/react-app/files/src/App.css +15 -15
  15. package/templates/react-app/files/src/App.js +15 -15
  16. package/templates/react-app/files/src/index.css +10 -10
  17. package/templates/react-app/files/src/index.js +11 -11
  18. package/templates/react-app/template.json +11 -11
  19. package/templates/react-component/files/Component.module.css +5 -5
  20. package/templates/react-component/files/Component.tsx +31 -31
  21. package/templates/react-component/files/index.ts +2 -2
  22. package/templates/react-component/template.json +48 -48
  23. package/templates/vue-app/files/.editorconfig +14 -14
  24. package/templates/vue-app/files/.env.development +21 -21
  25. package/templates/vue-app/files/.env.production +18 -18
  26. package/templates/vue-app/files/.eslintignore +5 -5
  27. package/templates/vue-app/files/.eslintrc.js +267 -267
  28. package/templates/vue-app/files/.prettierignore +11 -11
  29. package/templates/vue-app/files/.travis.yml +5 -5
  30. package/templates/vue-app/files/.vscode/extensions.json +7 -7
  31. package/templates/vue-app/files/.vscode/settings.json +39 -39
  32. package/templates/vue-app/files/LICENSE +191 -191
  33. package/templates/vue-app/files/README.md +87 -87
  34. package/templates/vue-app/files/babel.config.js +11 -11
  35. package/templates/vue-app/files/jest.config.js +24 -24
  36. package/templates/vue-app/files/package.json +136 -136
  37. package/templates/vue-app/files/plopfile.js +7 -7
  38. package/templates/vue-app/files/postcss.config.js +5 -5
  39. package/templates/vue-app/files/public/default.js +25 -25
  40. package/templates/vue-app/files/public/index.html +26 -26
  41. package/templates/vue-app/files/src/App.vue +54 -54
  42. package/templates/vue-app/files/src/api/bigDataV/index.js +198 -198
  43. package/templates/vue-app/files/src/api/data.js +42 -42
  44. package/templates/vue-app/files/src/api/dataArchive/index.js +186 -186
  45. package/templates/vue-app/files/src/api/generator/genConfig.js +16 -16
  46. package/templates/vue-app/files/src/api/generator/generator.js +32 -32
  47. package/templates/vue-app/files/src/api/indexManagement/index.js +39 -39
  48. package/templates/vue-app/files/src/api/institutionMonitor/index.js +396 -396
  49. package/templates/vue-app/files/src/api/institutionSet/index.js +120 -120
  50. package/templates/vue-app/files/src/api/login.js +44 -44
  51. package/templates/vue-app/files/src/api/selfStatistics/index.js +50 -50
  52. package/templates/vue-app/files/src/api/system/code.js +15 -15
  53. package/templates/vue-app/files/src/api/system/dict.js +34 -34
  54. package/templates/vue-app/files/src/api/system/dictDetail.js +52 -52
  55. package/templates/vue-app/files/src/api/system/equipment.js +35 -35
  56. package/templates/vue-app/files/src/api/system/examManage.js +49 -49
  57. package/templates/vue-app/files/src/api/system/examProject.js +48 -48
  58. package/templates/vue-app/files/src/api/system/hosModel.js +35 -35
  59. package/templates/vue-app/files/src/api/system/hospital.js +88 -88
  60. package/templates/vue-app/files/src/api/system/job.js +40 -40
  61. package/templates/vue-app/files/src/api/system/menu.js +67 -67
  62. package/templates/vue-app/files/src/api/system/model.js +42 -42
  63. package/templates/vue-app/files/src/api/system/risConfig.js +9 -9
  64. package/templates/vue-app/files/src/api/system/role.js +64 -64
  65. package/templates/vue-app/files/src/api/system/sysSet.js +19 -19
  66. package/templates/vue-app/files/src/api/system/timing.js +41 -41
  67. package/templates/vue-app/files/src/api/system/user.js +121 -121
  68. package/templates/vue-app/files/src/api/tools/alipay.js +25 -25
  69. package/templates/vue-app/files/src/api/tools/email.js +24 -24
  70. package/templates/vue-app/files/src/api/tools/localStorage.js +27 -27
  71. package/templates/vue-app/files/src/api/tools/qiniu.js +40 -40
  72. package/templates/vue-app/files/src/assets/css/font-awesome.css +2342 -2342
  73. package/templates/vue-app/files/src/assets/css/font-awesome.min.css +2336 -2336
  74. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.svg +2671 -2671
  75. package/templates/vue-app/files/src/assets/icons/index.js +9 -9
  76. package/templates/vue-app/files/src/assets/icons/svg/hospital.svg +1 -1
  77. package/templates/vue-app/files/src/assets/icons/svg/hospital1.svg +1 -1
  78. package/templates/vue-app/files/src/assets/icons/svg/loginOne.svg +35 -35
  79. package/templates/vue-app/files/src/assets/icons/svg/loginOneWhite.svg +19 -19
  80. package/templates/vue-app/files/src/assets/icons/svg/loginOr.svg +93 -93
  81. package/templates/vue-app/files/src/assets/icons/svg/loginUp.svg +96 -96
  82. package/templates/vue-app/files/src/assets/icons/svg/monitor.svg +1 -1
  83. package/templates/vue-app/files/src/assets/icons/svg/offline.svg +1 -1
  84. package/templates/vue-app/files/src/assets/icons/svg/online.svg +1 -1
  85. package/templates/vue-app/files/src/assets/icons/svg/system.svg +1 -1
  86. package/templates/vue-app/files/src/assets/icons/svgo.yml +21 -21
  87. package/templates/vue-app/files/src/assets/styles/btn.scss +103 -103
  88. package/templates/vue-app/files/src/assets/styles/eladmin.scss +124 -124
  89. package/templates/vue-app/files/src/assets/styles/element-ui.scss +217 -217
  90. package/templates/vue-app/files/src/assets/styles/element-variables.scss +31 -31
  91. package/templates/vue-app/files/src/assets/styles/global.scss +73 -73
  92. package/templates/vue-app/files/src/assets/styles/index.scss +220 -220
  93. package/templates/vue-app/files/src/assets/styles/mixin.scss +60 -60
  94. package/templates/vue-app/files/src/assets/styles/publicStyle.scss +224 -224
  95. package/templates/vue-app/files/src/assets/styles/sidebar.scss +239 -239
  96. package/templates/vue-app/files/src/assets/styles/transition.scss +48 -48
  97. package/templates/vue-app/files/src/assets/styles/variables.scss +44 -44
  98. package/templates/vue-app/files/src/common/flexible.js +145 -145
  99. package/templates/vue-app/files/src/components/Breadcrumb/index.vue +87 -87
  100. package/templates/vue-app/files/src/components/Crud/CRUD.operation.vue +248 -248
  101. package/templates/vue-app/files/src/components/Crud/Pagination.vue +20 -20
  102. package/templates/vue-app/files/src/components/Crud/RR.operation.vue +39 -39
  103. package/templates/vue-app/files/src/components/Crud/UD.operation.vue +106 -106
  104. package/templates/vue-app/files/src/components/Crud/crud.js +907 -907
  105. package/templates/vue-app/files/src/components/Crud/user/UR.operation.vue +154 -154
  106. package/templates/vue-app/files/src/components/DateRangePicker/index.vue +42 -42
  107. package/templates/vue-app/files/src/components/DateRangePickerProhibitNext/index.vue +42 -42
  108. package/templates/vue-app/files/src/components/DateRangePickerProhibitTodayNext/index.vue +48 -48
  109. package/templates/vue-app/files/src/components/Dict/Dict.js +31 -31
  110. package/templates/vue-app/files/src/components/Dict/index.js +29 -29
  111. package/templates/vue-app/files/src/components/Doc/index.vue +16 -16
  112. package/templates/vue-app/files/src/components/Echarts/BarChart.vue +115 -115
  113. package/templates/vue-app/files/src/components/Echarts/Category.vue +768 -768
  114. package/templates/vue-app/files/src/components/Echarts/Funnel.vue +120 -120
  115. package/templates/vue-app/files/src/components/Echarts/Gauge.vue +74 -74
  116. package/templates/vue-app/files/src/components/Echarts/Graph.vue +101 -101
  117. package/templates/vue-app/files/src/components/Echarts/HeatMap.vue +301 -301
  118. package/templates/vue-app/files/src/components/Echarts/Line3D.vue +110 -110
  119. package/templates/vue-app/files/src/components/Echarts/PieChart.vue +84 -84
  120. package/templates/vue-app/files/src/components/Echarts/Point.vue +161 -161
  121. package/templates/vue-app/files/src/components/Echarts/RadarChart.vue +123 -123
  122. package/templates/vue-app/files/src/components/Echarts/Rich.vue +160 -160
  123. package/templates/vue-app/files/src/components/Echarts/Sankey.vue +114 -114
  124. package/templates/vue-app/files/src/components/Echarts/Scatter.vue +192 -192
  125. package/templates/vue-app/files/src/components/Echarts/Sunburst.vue +127 -127
  126. package/templates/vue-app/files/src/components/Echarts/ThemeRiver.vue +233 -233
  127. package/templates/vue-app/files/src/components/Echarts/WordCloud.vue +201 -201
  128. package/templates/vue-app/files/src/components/GithubCorner/index.vue +55 -55
  129. package/templates/vue-app/files/src/components/Hamburger/index.vue +44 -44
  130. package/templates/vue-app/files/src/components/HeaderSearch/index.vue +196 -196
  131. package/templates/vue-app/files/src/components/IconSelect/index.vue +74 -74
  132. package/templates/vue-app/files/src/components/IconSelect/requireIcons.js +10 -10
  133. package/templates/vue-app/files/src/components/Iframe/index.vue +30 -30
  134. package/templates/vue-app/files/src/components/JavaEdit/index.vue +78 -78
  135. package/templates/vue-app/files/src/components/Pagination/index.vue +100 -100
  136. package/templates/vue-app/files/src/components/PanThumb/index.vue +149 -149
  137. package/templates/vue-app/files/src/components/ParentView/index.vue +3 -3
  138. package/templates/vue-app/files/src/components/Permission/index.js +13 -13
  139. package/templates/vue-app/files/src/components/Permission/permission.js +21 -21
  140. package/templates/vue-app/files/src/components/RightPanel/index.vue +149 -149
  141. package/templates/vue-app/files/src/components/Screenfull/index.vue +60 -60
  142. package/templates/vue-app/files/src/components/SizeSelect/index.vue +60 -60
  143. package/templates/vue-app/files/src/components/SvgIcon/index.vue +66 -66
  144. package/templates/vue-app/files/src/components/ThemePicker/index.vue +177 -177
  145. package/templates/vue-app/files/src/components/UploadExcel/index.vue +149 -149
  146. package/templates/vue-app/files/src/components/WaterMark/setWaterMark.js +68 -68
  147. package/templates/vue-app/files/src/components/WaterMark/waterMark.vue +69 -69
  148. package/templates/vue-app/files/src/components/Xgplayer/index.vue +49 -49
  149. package/templates/vue-app/files/src/components/YamlEdit/index.vue +81 -81
  150. package/templates/vue-app/files/src/layout/components/AppMain.vue +67 -67
  151. package/templates/vue-app/files/src/layout/components/Navbar.vue +209 -209
  152. package/templates/vue-app/files/src/layout/components/Settings/index.vue +125 -125
  153. package/templates/vue-app/files/src/layout/components/Sidebar/FixiOSBug.js +26 -26
  154. package/templates/vue-app/files/src/layout/components/Sidebar/Item.vue +29 -29
  155. package/templates/vue-app/files/src/layout/components/Sidebar/Link.vue +35 -35
  156. package/templates/vue-app/files/src/layout/components/Sidebar/Logo.vue +93 -93
  157. package/templates/vue-app/files/src/layout/components/Sidebar/SidebarItem.vue +104 -104
  158. package/templates/vue-app/files/src/layout/components/Sidebar/index.vue +79 -79
  159. package/templates/vue-app/files/src/layout/components/TagsView/ScrollPane.vue +90 -90
  160. package/templates/vue-app/files/src/layout/components/TagsView/index.vue +299 -299
  161. package/templates/vue-app/files/src/layout/components/index.js +5 -5
  162. package/templates/vue-app/files/src/layout/index.vue +119 -119
  163. package/templates/vue-app/files/src/layout/mixin/ResizeHandler.js +45 -45
  164. package/templates/vue-app/files/src/main.js +89 -89
  165. package/templates/vue-app/files/src/mixins/crud.js +348 -348
  166. package/templates/vue-app/files/src/router/index.js +156 -156
  167. package/templates/vue-app/files/src/router/routers.js +203 -203
  168. package/templates/vue-app/files/src/settings.js +57 -57
  169. package/templates/vue-app/files/src/store/getters.js +29 -29
  170. package/templates/vue-app/files/src/store/index.js +25 -25
  171. package/templates/vue-app/files/src/store/modules/api.js +33 -33
  172. package/templates/vue-app/files/src/store/modules/app.js +55 -55
  173. package/templates/vue-app/files/src/store/modules/permission.js +79 -79
  174. package/templates/vue-app/files/src/store/modules/register.js +17 -17
  175. package/templates/vue-app/files/src/store/modules/settings.js +46 -46
  176. package/templates/vue-app/files/src/store/modules/tagsView.js +168 -168
  177. package/templates/vue-app/files/src/store/modules/user.js +119 -119
  178. package/templates/vue-app/files/src/utils/auth.js +18 -18
  179. package/templates/vue-app/files/src/utils/base64ToFile.js +27 -27
  180. package/templates/vue-app/files/src/utils/clipboard.js +36 -36
  181. package/templates/vue-app/files/src/utils/datetime.js +289 -289
  182. package/templates/vue-app/files/src/utils/getBlobFile.js +10 -10
  183. package/templates/vue-app/files/src/utils/getTime.js +29 -29
  184. package/templates/vue-app/files/src/utils/index.js +520 -520
  185. package/templates/vue-app/files/src/utils/permission.js +29 -29
  186. package/templates/vue-app/files/src/utils/pinyin.js +450 -450
  187. package/templates/vue-app/files/src/utils/request.js +139 -139
  188. package/templates/vue-app/files/src/utils/rsaEncrypt.js +37 -37
  189. package/templates/vue-app/files/src/utils/shortcuts.js +210 -210
  190. package/templates/vue-app/files/src/utils/upload.js +12 -12
  191. package/templates/vue-app/files/src/utils/validate.js +262 -262
  192. package/templates/vue-app/files/src/views/components/Echarts.vue +124 -124
  193. package/templates/vue-app/files/src/views/components/Editor.vue +75 -75
  194. package/templates/vue-app/files/src/views/components/MarkDown.vue +44 -44
  195. package/templates/vue-app/files/src/views/components/UVideo.vue +37 -37
  196. package/templates/vue-app/files/src/views/components/YamlEdit.vue +206 -206
  197. package/templates/vue-app/files/src/views/components/camera/camera.vue +115 -115
  198. package/templates/vue-app/files/src/views/components/camera/cameraTest.vue +158 -158
  199. package/templates/vue-app/files/src/views/components/excel/upload-excel.vue +41 -41
  200. package/templates/vue-app/files/src/views/components/icons/element-icons.js +74 -74
  201. package/templates/vue-app/files/src/views/components/icons/index.vue +106 -106
  202. package/templates/vue-app/files/src/views/components/icons/svg-icons.js +10 -10
  203. package/templates/vue-app/files/src/views/components/scroll/index.vue +107 -107
  204. package/templates/vue-app/files/src/views/components/scrollFull/index.vue +99 -99
  205. package/templates/vue-app/files/src/views/dashboard/LineChart.vue +138 -138
  206. package/templates/vue-app/files/src/views/dashboard/PanelGroup.vue +173 -173
  207. package/templates/vue-app/files/src/views/dashboard/mixins/resize.js +57 -57
  208. package/templates/vue-app/files/src/views/dataArchive/delTable.vue +354 -354
  209. package/templates/vue-app/files/src/views/dataArchive/exportDetail.vue +121 -121
  210. package/templates/vue-app/files/src/views/dataArchive/exportList.vue +160 -160
  211. package/templates/vue-app/files/src/views/dataArchive/index.vue +2104 -2104
  212. package/templates/vue-app/files/src/views/features/401.vue +83 -83
  213. package/templates/vue-app/files/src/views/features/404.vue +226 -226
  214. package/templates/vue-app/files/src/views/features/redirect.vue +12 -12
  215. package/templates/vue-app/files/src/views/generator/config.vue +348 -348
  216. package/templates/vue-app/files/src/views/generator/index.vue +143 -143
  217. package/templates/vue-app/files/src/views/generator/preview.vue +39 -39
  218. package/templates/vue-app/files/src/views/home.vue +80 -80
  219. package/templates/vue-app/files/src/views/indexManagement/index.vue +422 -422
  220. package/templates/vue-app/files/src/views/indexManagement/other.vue +286 -286
  221. package/templates/vue-app/files/src/views/institutionMonitor/components/LineChart.vue +191 -191
  222. package/templates/vue-app/files/src/views/institutionMonitor/index.scss +339 -339
  223. package/templates/vue-app/files/src/views/institutionMonitor/index.vue +1385 -1385
  224. package/templates/vue-app/files/src/views/institutionMonitor/mixins/resize.js +57 -57
  225. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/checkProjectCode.vue +267 -267
  226. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/imageAbnormalMonitor.vue +361 -361
  227. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/index.vue +686 -686
  228. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/leakageAnomaly.vue +270 -270
  229. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/moveMonitore.vue +114 -114
  230. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/qualityMonitore.vue +338 -338
  231. package/templates/vue-app/files/src/views/institutionSet/cloudSet.vue +534 -534
  232. package/templates/vue-app/files/src/views/institutionSet/index.vue +2550 -2550
  233. package/templates/vue-app/files/src/views/login.vue +243 -243
  234. package/templates/vue-app/files/src/views/qualityLogin.vue +280 -280
  235. package/templates/vue-app/files/src/views/selfStatistics/components/LineChart.vue +296 -296
  236. package/templates/vue-app/files/src/views/selfStatistics/hospitalDetail/index.vue +533 -533
  237. package/templates/vue-app/files/src/views/selfStatistics/index.scss +447 -447
  238. package/templates/vue-app/files/src/views/selfStatistics/index.vue +903 -903
  239. package/templates/vue-app/files/src/views/selfStatistics/mixins/resize.js +57 -57
  240. package/templates/vue-app/files/src/views/selfStatistics/monitorDetail/index.vue +285 -285
  241. package/templates/vue-app/files/src/views/selfStatistics/offlineDetail/index.vue +104 -104
  242. package/templates/vue-app/files/src/views/selfStatistics/selfActiveDetail/index.vue +104 -104
  243. package/templates/vue-app/files/src/views/selfStatistics/selfMonitorDetail/index.vue +420 -420
  244. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/setWaterMark.js +68 -68
  245. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/waterMark.vue +69 -69
  246. package/templates/vue-app/files/src/views/system/dept/index.vue +144 -144
  247. package/templates/vue-app/files/src/views/system/dict/dictDetail.vue +146 -146
  248. package/templates/vue-app/files/src/views/system/dict/index.vue +159 -159
  249. package/templates/vue-app/files/src/views/system/examModality/index.vue +174 -174
  250. package/templates/vue-app/files/src/views/system/examPart/index.vue +184 -184
  251. package/templates/vue-app/files/src/views/system/examProject/index.vue +321 -321
  252. package/templates/vue-app/files/src/views/system/examine/index.vue +66 -66
  253. package/templates/vue-app/files/src/views/system/job/index.vue +119 -119
  254. package/templates/vue-app/files/src/views/system/job/module/form.vue +72 -72
  255. package/templates/vue-app/files/src/views/system/job/module/header.vue +48 -48
  256. package/templates/vue-app/files/src/views/system/menu/index.vue +327 -327
  257. package/templates/vue-app/files/src/views/system/model/index.vue +285 -285
  258. package/templates/vue-app/files/src/views/system/role/index.vue +434 -434
  259. package/templates/vue-app/files/src/views/system/sysSet/index.vue +84 -84
  260. package/templates/vue-app/files/src/views/system/timing/index.vue +289 -289
  261. package/templates/vue-app/files/src/views/system/timing/log.vue +143 -143
  262. package/templates/vue-app/files/src/views/system/user/admin.vue +414 -414
  263. package/templates/vue-app/files/src/views/system/user/center/updateEmail.vue +146 -146
  264. package/templates/vue-app/files/src/views/system/user/center/updatePass.vue +168 -168
  265. package/templates/vue-app/files/src/views/system/user/center.vue +140 -140
  266. package/templates/vue-app/files/src/views/system/user/index.vue +972 -972
  267. package/templates/vue-app/files/src/views/systemSet/role/index.vue +314 -314
  268. package/templates/vue-app/files/src/views/systemSet/user/admin.vue +414 -414
  269. package/templates/vue-app/files/src/views/systemSet/user/center/updateEmail.vue +146 -146
  270. package/templates/vue-app/files/src/views/systemSet/user/center/updatePass.vue +115 -115
  271. package/templates/vue-app/files/src/views/systemSet/user/center.vue +351 -351
  272. package/templates/vue-app/files/src/views/systemSet/user/index.vue +928 -928
  273. package/templates/vue-app/files/src/views/tools/aliPay/config.vue +102 -102
  274. package/templates/vue-app/files/src/views/tools/aliPay/index.vue +48 -48
  275. package/templates/vue-app/files/src/views/tools/aliPay/toPay.vue +91 -91
  276. package/templates/vue-app/files/src/views/tools/email/config.vue +91 -91
  277. package/templates/vue-app/files/src/views/tools/email/index.vue +42 -42
  278. package/templates/vue-app/files/src/views/tools/email/send.vue +159 -159
  279. package/templates/vue-app/files/src/views/tools/storage/index.vue +35 -35
  280. package/templates/vue-app/files/src/views/tools/storage/local/index.vue +207 -207
  281. package/templates/vue-app/files/src/views/tools/storage/qiniu/form.vue +108 -108
  282. package/templates/vue-app/files/src/views/tools/storage/qiniu/index.vue +241 -241
  283. package/templates/vue-app/files/src/views/tools/swagger/index.vue +14 -14
  284. package/templates/vue-app/files/vue.config.js +173 -173
  285. 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.15",
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
+ }