@gx-design-vue/create-gx-cli 0.1.10 → 0.1.11

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 (179) hide show
  1. package/package.json +2 -1
  2. package/template-gx-design-thin/.editorconfig +19 -0
  3. package/template-gx-design-thin/.env +4 -0
  4. package/template-gx-design-thin/.env.development +15 -0
  5. package/template-gx-design-thin/.env.production +28 -0
  6. package/template-gx-design-thin/.eslintignore +16 -0
  7. package/template-gx-design-thin/.prettierignore +9 -0
  8. package/template-gx-design-thin/LICENSE +21 -0
  9. package/template-gx-design-thin/README.md +112 -0
  10. package/template-gx-design-thin/build/constant.ts +1 -0
  11. package/template-gx-design-thin/build/generate/generateModifyVars.ts +14 -0
  12. package/template-gx-design-thin/build/rollupOptions/index.ts +22 -0
  13. package/template-gx-design-thin/build/util/hash.ts +17 -0
  14. package/template-gx-design-thin/build/util/index.ts +131 -0
  15. package/template-gx-design-thin/build/vite/cdn.ts +63 -0
  16. package/template-gx-design-thin/build/vite/optimizer.ts +26 -0
  17. package/template-gx-design-thin/build/vite/plugin/appConfig.ts +91 -0
  18. package/template-gx-design-thin/build/vite/plugin/autoImport.ts +26 -0
  19. package/template-gx-design-thin/build/vite/plugin/compress.ts +31 -0
  20. package/template-gx-design-thin/build/vite/plugin/html.ts +39 -0
  21. package/template-gx-design-thin/build/vite/plugin/index.ts +75 -0
  22. package/template-gx-design-thin/build/vite/plugin/mock.ts +14 -0
  23. package/template-gx-design-thin/build/vite/plugin/pwa.ts +31 -0
  24. package/template-gx-design-thin/build/vite/plugin/visualizer.ts +14 -0
  25. package/template-gx-design-thin/build/vite/plugin/viteMock/client.ts +88 -0
  26. package/template-gx-design-thin/build/vite/plugin/viteMock/createMockServer.ts +271 -0
  27. package/template-gx-design-thin/build/vite/plugin/viteMock/index.ts +69 -0
  28. package/template-gx-design-thin/build/vite/plugin/viteMock/types.ts +48 -0
  29. package/template-gx-design-thin/build/vite/plugin/viteMock/utils.ts +48 -0
  30. package/template-gx-design-thin/build/vite/plugin/viteNotice.ts +40 -0
  31. package/template-gx-design-thin/commitlint.config.cjs +32 -0
  32. package/template-gx-design-thin/config/default/defaultSettings.ts +78 -0
  33. package/template-gx-design-thin/config/default/network.ts +10 -0
  34. package/template-gx-design-thin/config/default/proxy.ts +47 -0
  35. package/template-gx-design-thin/config/default/theme.ts +3 -0
  36. package/template-gx-design-thin/config/index.ts +11 -0
  37. package/template-gx-design-thin/eslint.config.js +51 -0
  38. package/template-gx-design-thin/index.html +42 -0
  39. package/template-gx-design-thin/mock/_createProductionServer.ts +19 -0
  40. package/template-gx-design-thin/mock/_util.ts +33 -0
  41. package/template-gx-design-thin/mock/config/menu.ts +21 -0
  42. package/template-gx-design-thin/mock/config/user.ts +123 -0
  43. package/template-gx-design-thin/mock/datasSource/system/menu.ts +10 -0
  44. package/template-gx-design-thin/mock/datasSource/user/account.ts +30 -0
  45. package/template-gx-design-thin/mock/datasSource/user/index.ts +47 -0
  46. package/template-gx-design-thin/mock/util/crypto.ts +23 -0
  47. package/template-gx-design-thin/mock/util/table.ts +92 -0
  48. package/template-gx-design-thin/mock/util/utils.ts +73 -0
  49. package/template-gx-design-thin/package.json +129 -0
  50. package/template-gx-design-thin/pnpm-lock.yaml +12575 -0
  51. package/template-gx-design-thin/prettier.config.cjs +18 -0
  52. package/template-gx-design-thin/public/resource/css/index.css +119 -0
  53. package/template-gx-design-thin/public/resource/css/normalize.css +396 -0
  54. package/template-gx-design-thin/public/resource/img/favicon.ico +0 -0
  55. package/template-gx-design-thin/public/resource/img/logo.png +0 -0
  56. package/template-gx-design-thin/public/resource/img/pro_icon.svg +1 -0
  57. package/template-gx-design-thin/public/resource/img/pwa-192x192.png +0 -0
  58. package/template-gx-design-thin/public/resource/img/pwa-512x512.png +0 -0
  59. package/template-gx-design-thin/src/App.vue +42 -0
  60. package/template-gx-design-thin/src/assets/error_images/403.png +0 -0
  61. package/template-gx-design-thin/src/assets/error_images/404.png +0 -0
  62. package/template-gx-design-thin/src/assets/error_images/cloud.png +0 -0
  63. package/template-gx-design-thin/src/assets/login_images/login_background.svg +1 -0
  64. package/template-gx-design-thin/src/assets/logo.png +0 -0
  65. package/template-gx-design-thin/src/assets/menu_font/iconfont.css +94 -0
  66. package/template-gx-design-thin/src/assets/menu_font/iconfont.eot +0 -0
  67. package/template-gx-design-thin/src/assets/menu_font/iconfont.js +1 -0
  68. package/template-gx-design-thin/src/assets/menu_font/iconfont.json +142 -0
  69. package/template-gx-design-thin/src/assets/menu_font/iconfont.svg +1 -0
  70. package/template-gx-design-thin/src/assets/menu_font/iconfont.ttf +0 -0
  71. package/template-gx-design-thin/src/assets/menu_font/iconfont.woff +0 -0
  72. package/template-gx-design-thin/src/assets/menu_font/iconfont.woff2 +0 -0
  73. package/template-gx-design-thin/src/assets/menu_font/index.less +94 -0
  74. package/template-gx-design-thin/src/assets/public_icon/iconfont.css +42 -0
  75. package/template-gx-design-thin/src/assets/public_icon/iconfont.eot +0 -0
  76. package/template-gx-design-thin/src/assets/public_icon/iconfont.js +1 -0
  77. package/template-gx-design-thin/src/assets/public_icon/iconfont.json +51 -0
  78. package/template-gx-design-thin/src/assets/public_icon/iconfont.svg +1 -0
  79. package/template-gx-design-thin/src/assets/public_icon/iconfont.ttf +0 -0
  80. package/template-gx-design-thin/src/assets/public_icon/iconfont.woff +0 -0
  81. package/template-gx-design-thin/src/assets/public_icon/iconfont.woff2 +0 -0
  82. package/template-gx-design-thin/src/assets/public_icon/index.less +42 -0
  83. package/template-gx-design-thin/src/assets/public_images/nodata.svg +1 -0
  84. package/template-gx-design-thin/src/common/global.ts +4 -0
  85. package/template-gx-design-thin/src/components/GDesign/Result/index.tsx +144 -0
  86. package/template-gx-design-thin/src/components/GDesign/Result/style.less +140 -0
  87. package/template-gx-design-thin/src/components/GDesign/utils/index.ts +7 -0
  88. package/template-gx-design-thin/src/components/GlobalLayout/Confirm/index.ts +21 -0
  89. package/template-gx-design-thin/src/components/GlobalLayout/Empty/index.vue +18 -0
  90. package/template-gx-design-thin/src/components/GlobalLayout/RightContent/index.tsx +126 -0
  91. package/template-gx-design-thin/src/components/GlobalLayout/RightContent/style.ts +77 -0
  92. package/template-gx-design-thin/src/components/GlobalLayout/Spin/index.tsx +30 -0
  93. package/template-gx-design-thin/src/components/PageLoading/index.tsx +51 -0
  94. package/template-gx-design-thin/src/components/index.ts +6 -0
  95. package/template-gx-design-thin/src/core/ant-design/index.ts +10 -0
  96. package/template-gx-design-thin/src/core/gx-admin-design/index.ts +6 -0
  97. package/template-gx-design-thin/src/core/gx-design/index.ts +6 -0
  98. package/template-gx-design-thin/src/core/gx-pro-design/index.ts +8 -0
  99. package/template-gx-design-thin/src/core/index.ts +84 -0
  100. package/template-gx-design-thin/src/design/ant-design/index.less +4 -0
  101. package/template-gx-design-thin/src/design/ant-design/layout.less +22 -0
  102. package/template-gx-design-thin/src/design/ant-design/menu.less +48 -0
  103. package/template-gx-design-thin/src/design/ant-design/spin.less +23 -0
  104. package/template-gx-design-thin/src/design/ant-design/tooltip.less +7 -0
  105. package/template-gx-design-thin/src/design/color.less +1 -0
  106. package/template-gx-design-thin/src/design/config.less +5 -0
  107. package/template-gx-design-thin/src/design/imageEditor.less +180 -0
  108. package/template-gx-design-thin/src/design/index.less +95 -0
  109. package/template-gx-design-thin/src/design/mixin.less +65 -0
  110. package/template-gx-design-thin/src/design/normalize.less +391 -0
  111. package/template-gx-design-thin/src/design/root.less +3 -0
  112. package/template-gx-design-thin/src/hooks/core/index.ts +3 -0
  113. package/template-gx-design-thin/src/hooks/core/useRequest/index.ts +118 -0
  114. package/template-gx-design-thin/src/hooks/event/index.ts +3 -0
  115. package/template-gx-design-thin/src/hooks/event/useClipboard.ts +15 -0
  116. package/template-gx-design-thin/src/hooks/web/index.ts +5 -0
  117. package/template-gx-design-thin/src/hooks/web/useThemeStyle.ts +16 -0
  118. package/template-gx-design-thin/src/layout/BasicLayout.vue +123 -0
  119. package/template-gx-design-thin/src/layout/BlankLayout.vue +5 -0
  120. package/template-gx-design-thin/src/layout/ContentView.vue +50 -0
  121. package/template-gx-design-thin/src/layout/IframeView.vue +1 -0
  122. package/template-gx-design-thin/src/layout/UserLayout.vue +7 -0
  123. package/template-gx-design-thin/src/main.ts +34 -0
  124. package/template-gx-design-thin/src/plugins/index.ts +2 -0
  125. package/template-gx-design-thin/src/router/guard/index.ts +83 -0
  126. package/template-gx-design-thin/src/router/guard/permissions.ts +70 -0
  127. package/template-gx-design-thin/src/router/guard/stateGuard.ts +10 -0
  128. package/template-gx-design-thin/src/router/helper/routeHelper.ts +231 -0
  129. package/template-gx-design-thin/src/router/helper/utils.ts +19 -0
  130. package/template-gx-design-thin/src/router/index.ts +31 -0
  131. package/template-gx-design-thin/src/router/routes/index.ts +86 -0
  132. package/template-gx-design-thin/src/router/routes/modules/dataSource.ts +12 -0
  133. package/template-gx-design-thin/src/services/common/index.ts +11 -0
  134. package/template-gx-design-thin/src/services/systemCenter/index.ts +1 -0
  135. package/template-gx-design-thin/src/services/systemCenter/menu.ts +9 -0
  136. package/template-gx-design-thin/src/services/userCenter/account.ts +42 -0
  137. package/template-gx-design-thin/src/services/userCenter/index.ts +28 -0
  138. package/template-gx-design-thin/src/store/index.ts +32 -0
  139. package/template-gx-design-thin/src/store/modules/dict.ts +28 -0
  140. package/template-gx-design-thin/src/store/modules/global.ts +42 -0
  141. package/template-gx-design-thin/src/store/modules/permission.ts +19 -0
  142. package/template-gx-design-thin/src/store/modules/routes.ts +113 -0
  143. package/template-gx-design-thin/src/store/modules/tabsRouter.ts +76 -0
  144. package/template-gx-design-thin/src/store/modules/user.ts +136 -0
  145. package/template-gx-design-thin/src/utils/accessToken.ts +80 -0
  146. package/template-gx-design-thin/src/utils/crypto/base64.ts +101 -0
  147. package/template-gx-design-thin/src/utils/crypto/index.ts +57 -0
  148. package/template-gx-design-thin/src/utils/env.ts +50 -0
  149. package/template-gx-design-thin/src/utils/fetchFile.ts +81 -0
  150. package/template-gx-design-thin/src/utils/index.ts +123 -0
  151. package/template-gx-design-thin/src/utils/pageTitle.ts +20 -0
  152. package/template-gx-design-thin/src/utils/request/XHR.ts +139 -0
  153. package/template-gx-design-thin/src/utils/request/axiosCancel.ts +69 -0
  154. package/template-gx-design-thin/src/utils/request/checkStatus.ts +25 -0
  155. package/template-gx-design-thin/src/utils/request/index.ts +144 -0
  156. package/template-gx-design-thin/src/utils/request/typings.ts +171 -0
  157. package/template-gx-design-thin/src/utils/storage.ts +199 -0
  158. package/template-gx-design-thin/src/utils/uploadFile.ts +27 -0
  159. package/template-gx-design-thin/src/utils/util.ts +198 -0
  160. package/template-gx-design-thin/src/utils/validate.ts +216 -0
  161. package/template-gx-design-thin/src/views/Iframe/index.vue +76 -0
  162. package/template-gx-design-thin/src/views/Page/one.vue +13 -0
  163. package/template-gx-design-thin/src/views/Page/two.vue +13 -0
  164. package/template-gx-design-thin/src/views/exception/403/index.vue +7 -0
  165. package/template-gx-design-thin/src/views/exception/404/index.vue +9 -0
  166. package/template-gx-design-thin/src/views/user/login/index.vue +109 -0
  167. package/template-gx-design-thin/src/views/user/login/style.less +38 -0
  168. package/template-gx-design-thin/tsconfig.json +46 -0
  169. package/template-gx-design-thin/types/ant-design-import.d.ts +99 -0
  170. package/template-gx-design-thin/types/auto-imports.d.ts +81 -0
  171. package/template-gx-design-thin/types/components.d.ts +24 -0
  172. package/template-gx-design-thin/types/config.d.ts +44 -0
  173. package/template-gx-design-thin/types/global.d.ts +97 -0
  174. package/template-gx-design-thin/types/mock.d.ts +16 -0
  175. package/template-gx-design-thin/types/module.d.ts +20 -0
  176. package/template-gx-design-thin/types/response.d.ts +15 -0
  177. package/template-gx-design-thin/unocss.config.ts +101 -0
  178. package/template-gx-design-thin/vite.config.ts +120 -0
  179. package/template-gx-design-thin/yarn.lock +9492 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gx-design-vue/create-gx-cli",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "license": "MIT",
5
5
  "description": "a cli to bootstrap gx project",
6
6
  "main": "src/index.js",
@@ -30,6 +30,7 @@
30
30
  "files": [
31
31
  "bin/",
32
32
  "src/",
33
+ "template-gx-design-thin/*",
33
34
  "template-mobile-vant-html/*",
34
35
  "template-mobile-vant-cli/*"
35
36
  ]
@@ -0,0 +1,19 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset=utf-8
5
+ end_of_line=lf
6
+ insert_final_newline=true
7
+ indent_style=space
8
+ indent_size=2
9
+ max_line_length = 100
10
+
11
+ [*.{yml,yaml,json}]
12
+ indent_style = space
13
+ indent_size = 2
14
+
15
+ [*.md]
16
+ trim_trailing_whitespace = false
17
+
18
+ [Makefile]
19
+ indent_style = tab
@@ -0,0 +1,4 @@
1
+ VITE_HOME_PAGE=https://gx12358.cn
2
+ VITE_HOME_PAGE_DOC=https://gx12358.cn/doc
3
+ VITE_GITHUB_PAGE=https://github.com/gx12358/vue3-antd-admin
4
+ VITE_GITEE_PAGE=https://gitee.com/gx12358/vue3-antd-admin
@@ -0,0 +1,15 @@
1
+ # 实际执行环境 development
2
+ VITE_NODE_ENV= development
3
+
4
+ # environment 代码环境
5
+ VITE_USE_MODE = development
6
+
7
+ # 是否开启mock
8
+ VITE_USE_MOCK = true
9
+
10
+ # 是否删除console
11
+ VITE_DROP_CONSOLE = false
12
+
13
+ # api前缀
14
+ VITE_BASE_URL=/api
15
+
@@ -0,0 +1,28 @@
1
+ # 项目启动执行环境
2
+ VITE_NODE_ENV= production
3
+
4
+ # 代码运行环境
5
+ VITE_USE_MODE = production
6
+
7
+ # 是否开启mock
8
+ VITE_USE_MOCK = true
9
+
10
+ # 是否删除console
11
+ VITE_DROP_CONSOLE = false
12
+
13
+ # Whether to enable gzip or brotli compression
14
+ # Optional: gzip | brotli | none
15
+ # If you need multiple forms, you can use `,` to separate
16
+ VITE_BUILD_COMPRESS = 'none'
17
+
18
+ # 使用压缩时是否删除源文件,默认为false
19
+ VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
20
+
21
+ # 是否使用pwa
22
+ VITE_USE_PWA = false
23
+
24
+ # 是否为打包后的文件提供传统浏览器兼容性支持
25
+ VITE_LEGACY = false
26
+
27
+ # api前缀
28
+ VITE_BASE_URL=/mock-server
@@ -0,0 +1,16 @@
1
+
2
+ *.sh
3
+ node_modules
4
+ *.md
5
+ *.woff
6
+ *.ttf
7
+ .vscode
8
+ .idea
9
+ dist
10
+ /public
11
+ /docs
12
+ .husky
13
+ .local
14
+ .history
15
+ /bin
16
+ Dockerfile
@@ -0,0 +1,9 @@
1
+ /dist/*
2
+ .local
3
+ .output.js
4
+ /node_modules/**
5
+
6
+ **/*.svg
7
+ **/*.sh
8
+
9
+ /public/*
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 gx12358
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,112 @@
1
+ <div align="center"> <a href="https://github.com/gx12358/vue3-antd-admin"> <img alt="VbenAdmin Logo" width="200" src="https://gx12358.cn/resource/img/favicon.ico"> </a> <br> <br>
2
+
3
+ <h1>GX Pro Admin(Ant Design Vue)</h1>
4
+ </div>
5
+
6
+ ## 简介
7
+
8
+ GX Pro Admin 是一个免费开源的中后台模版。使用了最新的`vue3.0+`,`vite5`,`TypeScript`, `Ant Design Vue4.0+`, `Unocss`等主流技术开发,开箱即用的中后台前端解决方案,也可用于学习参考。
9
+ 如果大家喜欢的话,给个start!
10
+
11
+ ## 特性
12
+
13
+ - **最新技术栈**:使用 Vue3、vite5、ant-design-vue4、unocss 等前端前沿技术开发
14
+ - **TypeScript**: 应用程序级 JavaScript 的语言
15
+ - **主题**:可配置定制化的主题
16
+ - **Mock 数据** 内置 Mock 数据方案
17
+ - **权限** 内置完善的动态路由权限生成方案
18
+ - **组件** 二次封装了多个pro企业级的组件
19
+
20
+ ## 预览
21
+
22
+ - [🚀 pro 版演示地址](https://gx12358.cn/)
23
+ 测试账号: admin/gx.design
24
+
25
+ - [🚀 系统文档地址](https://gx12358.cn/doc/)
26
+ - [🚀 pro 组件文档地址](https://gx12358.cn/procomponents/)
27
+
28
+
29
+ ## 准备
30
+
31
+ - [node](http://nodejs.org/) 和 [git](https://git-scm.com/) -项目开发环境
32
+ - [Vite](https://vitejs.dev/) - 熟悉 vite 特性
33
+ - [Vue3](https://v3.vuejs.org/) - 熟悉 Vue 基础语法
34
+ - [TypeScript](https://www.typescriptlang.org/) - 熟悉`TypeScript`基本语法
35
+ - [Es6+](http://es6.ruanyifeng.com/) - 熟悉 es6 基本语法
36
+ - [Vue-Router-Next](https://next.router.vuejs.org/) - 熟悉 vue-router 基本使用
37
+ - [Ant-Design-Vue](https://next.antdv.com/components/overview-cn/) - ui 基本使用
38
+ - [Mock.js](https://github.com/nuysoft/Mock) - mockjs 基本语法
39
+
40
+ ## 安装使用
41
+
42
+ - 获取项目代码
43
+
44
+ ```bash
45
+ git clone https://gitee.com/gx12358/vite-admin-pro
46
+ ```
47
+
48
+ - 安装依赖
49
+
50
+ ```bash
51
+ cd gx-admin-pro
52
+
53
+ pnpm install
54
+
55
+ ```
56
+
57
+ - 运行
58
+
59
+ ```bash
60
+ pnpm run serve
61
+ ```
62
+
63
+ - 打包
64
+
65
+ ```bash
66
+ pnpm run build
67
+ ```
68
+
69
+ ## Git 贡献提交规范
70
+
71
+ - 参考 [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) 规范
72
+ - `feat` 增加新功能
73
+ - `fix` 修复问题/BUG
74
+ - `style` 代码风格相关无影响运行结果的
75
+ - `perf` 优化/性能提升
76
+ - `refactor` 重构
77
+ - `revert` 撤销修改
78
+ - `test` 测试相关
79
+ - `docs` 文档/注释
80
+ - `chore` 依赖更新/脚手架配置修改等
81
+ - `workflow` 工作流改进
82
+ - `ci` 持续集成
83
+ - `types` 类型定义文件更改
84
+ - `wip` 开发中
85
+
86
+ ## 浏览器支持
87
+
88
+ 本地开发推荐使用`Chrome 80+` 浏览器
89
+
90
+ 支持现代浏览器, 不支持 IE
91
+
92
+ ## 相关仓库
93
+
94
+ 如果这些插件对你有帮助,可以给一个 star 支持下
95
+
96
+ - [vite-plugin-html](https://github.com/anncwb/vite-plugin-html) - 用于 html 模版转换及压缩
97
+ - [vite-plugin-compression](https://github.com/anncwb/vite-plugin-compression) - 用于打包输出.gz|.brotil 文件
98
+ - [vite-plugin-svg-icons](https://github.com/anncwb/vite-plugin-svg-icons) - 用于快速生成 svg 雪碧图
99
+
100
+ ## 维护者
101
+
102
+ [@gx12358](https://github.com/gx12358/vue3-antd-admin)
103
+
104
+ ## 交流
105
+
106
+ `Vue3-Antd-Admin` 是完全开源免费的项目,在帮助开发者更方便地进行中大型管理系统开发,同时也提供 QQ 交流群使用问题欢迎在群内提问。
107
+
108
+ - QQ 群 `871430530`
109
+
110
+ ## License
111
+
112
+ [MIT © gx12358-2021](./LICENSE)
@@ -0,0 +1 @@
1
+ export const GLOB_CONFIG_FILE_NAME = '_app.config.js'
@@ -0,0 +1,14 @@
1
+ import { resolve } from 'node:path'
2
+ import { theme } from 'ant-design-vue'
3
+
4
+ export function generateModifyVars() {
5
+ const { defaultAlgorithm, defaultSeed } = theme
6
+
7
+ const mapToken = defaultAlgorithm(defaultSeed)
8
+ const modifyVarsParams = {
9
+ ...mapToken,
10
+ hack: `true; @import (reference) "${resolve('src/design/config.less')}";`
11
+ }
12
+
13
+ return modifyVarsParams
14
+ }
@@ -0,0 +1,22 @@
1
+ import type { RollupOptions } from 'rollup'
2
+ import externalGlobals from 'rollup-plugin-external-globals'
3
+ import { pathResolve } from '../util'
4
+ import { configManualChunk } from '../vite/optimizer'
5
+ import { getExternalMap } from '../vite/cdn'
6
+
7
+ export default function (useCdn: boolean) {
8
+ return {
9
+ input: {
10
+ index: pathResolve('index.html')
11
+ },
12
+ // 静态资源分类打包
13
+ output: {
14
+ manualChunks: configManualChunk,
15
+ chunkFileNames: 'static/js/[name]-[hash].js',
16
+ entryFileNames: 'static/js/[name]-[hash].js',
17
+ assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
18
+ },
19
+ external: useCdn ? Object.keys(getExternalMap()) : [],
20
+ plugins: useCdn ? [ externalGlobals(getExternalMap()) ] : []
21
+ } as RollupOptions
22
+ }
@@ -0,0 +1,17 @@
1
+ import { createHash } from 'node:crypto'
2
+
3
+ function createContentHash(content: string, hashLSize = 12) {
4
+ const hash = createHash('sha256').update(content)
5
+ return hash.digest('hex').slice(0, hashLSize)
6
+ }
7
+
8
+ function strToHex(str: string) {
9
+ const result: string[] = []
10
+ for (let i = 0; i < str.length; ++i) {
11
+ const hex = str.charCodeAt(i).toString(16)
12
+ result.push((`000${hex}`).slice(-4))
13
+ }
14
+ return result.join('').toUpperCase()
15
+ }
16
+
17
+ export { createContentHash, strToHex }
@@ -0,0 +1,131 @@
1
+ import fs from 'node:fs'
2
+ import path, { resolve } from 'node:path'
3
+ import dotenv from 'dotenv'
4
+
5
+ export const rootPath = process.cwd()
6
+
7
+ export function pathResolve(dir: string) {
8
+ return resolve(process.cwd(), '.', dir)
9
+ }
10
+
11
+ /**
12
+ * Whether to generate package preview
13
+ */
14
+ export function isReportMode(): boolean {
15
+ return process.env.REPORT === 'true'
16
+ }
17
+
18
+ // Read all environment variable configuration files to process.env
19
+ export function wrapperEnv(envConf: Recordable): ViteEnv {
20
+ const ret: any = {}
21
+
22
+ for (const envName of Object.keys(envConf)) {
23
+ let realName = envConf[envName].replace(/\\n/g, '\n')
24
+ realName = realName === 'true' ? true : realName === 'false' ? false : realName
25
+
26
+ ret[envName] = realName
27
+ process.env[envName] = realName
28
+ }
29
+ return ret
30
+ }
31
+
32
+ /**
33
+ * 获取当前环境下生效的配置文件名
34
+ */
35
+ function getConfFiles() {
36
+ const script = process.env.npm_lifecycle_script
37
+ const reg = new RegExp('--mode ([a-z]+)')
38
+ const result = reg.exec(script as string) as any
39
+ if (result) {
40
+ const mode = result[1] as string
41
+ return [ '.env', `.env.${mode}` ]
42
+ }
43
+ return [ '.env', '.env.production' ]
44
+ }
45
+
46
+ /**
47
+ * Get the environment variables starting with the specified prefix
48
+ * @param match prefix
49
+ * @param confFiles ext
50
+ */
51
+ export function getEnvConfig(confFiles = getConfFiles()): Partial<ViteEnv> {
52
+ let envConfig: Partial<ViteEnv> = {}
53
+ confFiles.forEach((item) => {
54
+ try {
55
+ const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)))
56
+ envConfig = { ...envConfig, ...env }
57
+ } catch (e) {
58
+ console.error(`Error in parsing ${item}`, e)
59
+ }
60
+ })
61
+ return envConfig
62
+ }
63
+
64
+ /**
65
+ * Get user root directory
66
+ * @param dir file path
67
+ */
68
+ export function getRootPath(...dir: string[]) {
69
+ return path.resolve(process.cwd(), ...dir)
70
+ }
71
+
72
+ export function getDefaultPath(supportTs = true) {
73
+ return path.resolve(process.cwd(), `src/main.${supportTs ? 'ts' : 'js'}`)
74
+ }
75
+
76
+ export function fileExists(f: string) {
77
+ try {
78
+ fs.accessSync(f, fs.constants.W_OK)
79
+ return true
80
+ } catch (error) {
81
+ return false
82
+ }
83
+ }
84
+
85
+ function q(t) {
86
+ return t.reduce((n, e) => n + e)
87
+ }
88
+
89
+ function Gt(t, n?: number) {
90
+ if (t === 0)
91
+ return '0 Bytes'
92
+ const e = 1024
93
+ const r = n || 2
94
+ const o = [ 'Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' ]
95
+ const s = Math.floor(Math.log(t) / Math.log(e))
96
+ return `${Number.parseFloat((t / e ** s).toFixed(r))} ${o[s]}`
97
+ }
98
+
99
+ const ot = []
100
+
101
+ export function getPackageSize({ folder, callBack, format = !0 }) {
102
+ fs.readdir(folder, (err, files) => {
103
+ if (err)
104
+ throw err
105
+
106
+ let index = 0
107
+ const callBacks = () => {
108
+ if (++index === files.length) {
109
+ callBack(format ? Gt(q(ot)) : q(ot))
110
+ }
111
+ }
112
+
113
+ files.forEach((p) => {
114
+ fs.stat(`${folder}/${p}`, (err, stat) => {
115
+ if (err)
116
+ throw err
117
+ if (stat.isFile()) {
118
+ ot.push(stat.size)
119
+ callBacks()
120
+ } else {
121
+ getPackageSize({
122
+ folder: `${folder}/${p}`,
123
+ callBack: callBacks
124
+ })
125
+ }
126
+ })
127
+ })
128
+
129
+ files.length === 0 && callBack(0)
130
+ })
131
+ }
@@ -0,0 +1,63 @@
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
+ import { defaultSettings } from '../../config'
4
+
5
+ const { cdnUrl, cdnModules } = defaultSettings
6
+
7
+ function getModuleVersion(name: string): string {
8
+ const pwd = process.cwd()
9
+ const pkgFile = path.join(pwd, 'node_modules', name, 'package.json')
10
+ if (fs.existsSync(pkgFile)) {
11
+ const pkgJson = JSON.parse(fs.readFileSync(pkgFile, 'utf8'))
12
+ return pkgJson.version
13
+ }
14
+
15
+ return ''
16
+ }
17
+
18
+ function isFullPath(path: string) {
19
+ return path.startsWith('http:') || path.startsWith('https:') || path.startsWith('//')
20
+ }
21
+
22
+ function renderUrl(data: CdnModuleList & {
23
+ version: string
24
+ }) {
25
+ const { path } = data
26
+ if (isFullPath(path))
27
+ return path
28
+ return cdnUrl.replace(/\{name\}/g, data.name)
29
+ .replace(/\{version\}/g, data.version)
30
+ .replace(/\{path\}/g, path)
31
+ }
32
+
33
+ function getCdnModuleFiles() {
34
+ return cdnModules.map(m => {
35
+ const version = getModuleVersion(m.name)
36
+ if (!version) {
37
+ throw new Error(`modules: ${m.name} package.json file does not exist`)
38
+ }
39
+
40
+ let css = m.css || []
41
+ if (!Array.isArray(css) && css) {
42
+ css = [ css ]
43
+ }
44
+
45
+ return {
46
+ js: renderUrl({
47
+ ...m,
48
+ version
49
+ }),
50
+ css
51
+ }
52
+ })
53
+ }
54
+
55
+ export function getExternalMap() {
56
+ const externalMap = {}
57
+ cdnModules.forEach((v) => {
58
+ externalMap[v.name] = v.globalName
59
+ })
60
+ return externalMap
61
+ }
62
+
63
+ export default getCdnModuleFiles()
@@ -0,0 +1,26 @@
1
+ import type { GetManualChunk } from 'rollup'
2
+
3
+ const vendorLibs: { match: string[]; output: string }[] = [
4
+ {
5
+ match: ['ant-design-vue'],
6
+ output: 'ant-design-vue',
7
+ },
8
+ {
9
+ match: ['@gx-design-vue/pro-field'],
10
+ output: 'pro-field',
11
+ },
12
+ {
13
+ match: ['@gx-design-vue/pro-form'],
14
+ output: 'pro-form',
15
+ },
16
+ ]
17
+
18
+ export const configManualChunk: GetManualChunk = (id: string) => {
19
+ if (/[\\/]node_modules[\\/]/.test(id)) {
20
+ const matchItem = vendorLibs.find((item) => {
21
+ const reg = new RegExp(`[\\/]node_modules[\\/]_?(${item.match.join('|')})(.*)`, 'ig')
22
+ return reg.test(id)
23
+ })
24
+ return matchItem ? matchItem.output : null
25
+ }
26
+ }
@@ -0,0 +1,91 @@
1
+ import colors from 'picocolors'
2
+ import type { PluginOption } from 'vite'
3
+ import { readPackageJSON } from 'pkg-types'
4
+
5
+ import { getEnvConfig, rootPath } from '../../util'
6
+ import { createContentHash, strToHex } from '../../util/hash'
7
+
8
+ const GLOBAL_CONFIG_FILE_NAME = '_app.config.js'
9
+ const PLUGIN_NAME = 'app-config'
10
+
11
+ async function createAppConfigPlugin({
12
+ isBuild
13
+ }: {
14
+ isBuild: boolean;
15
+ }): Promise<PluginOption> {
16
+ let publicPath: string
17
+ let source: string
18
+ if (!isBuild) {
19
+ return {
20
+ name: PLUGIN_NAME
21
+ }
22
+ }
23
+ const { version = '' } = await readPackageJSON(rootPath)
24
+
25
+ return {
26
+ name: PLUGIN_NAME,
27
+ async configResolved(_config) {
28
+ const appTitle = _config?.env?.VITE_GLOB_APP_TITLE ?? ''
29
+ publicPath = _config.base
30
+ source = await getConfigSource(appTitle)
31
+ },
32
+ async transformIndexHtml(html) {
33
+ publicPath = publicPath.endsWith('/') ? publicPath : `${publicPath}/`
34
+
35
+ const appConfigSrc = `${
36
+ publicPath || '/'
37
+ }${GLOBAL_CONFIG_FILE_NAME}?v=${version}-${createContentHash(source)}`
38
+
39
+ return {
40
+ html,
41
+ tags: [
42
+ {
43
+ tag: 'script',
44
+ attrs: {
45
+ src: appConfigSrc
46
+ }
47
+ }
48
+ ]
49
+ }
50
+ },
51
+ async generateBundle() {
52
+ try {
53
+ this.emitFile({
54
+ type: 'asset',
55
+ fileName: GLOBAL_CONFIG_FILE_NAME,
56
+ source
57
+ })
58
+ } catch (error) {
59
+ console.log(
60
+ colors.red(`configuration file configuration file failed to package:\n${error}`)
61
+ )
62
+ }
63
+ }
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Get the configuration file variable name
69
+ * @param env
70
+ */
71
+ const getVariableName = (title: string) => {
72
+ return `__PRODUCTION__${strToHex(title) || '__APP'}__CONF__`.toUpperCase().replace(/\s/g, '')
73
+ }
74
+
75
+ async function getConfigSource(appTitle: string) {
76
+ const config = await getEnvConfig()
77
+ const variableName = getVariableName(appTitle)
78
+ const windowVariable = `window.${variableName}`
79
+ // Ensure that the variable will not be modified
80
+ let source = `${windowVariable}=${JSON.stringify(config)};`
81
+ source += `
82
+ Object.freeze(${windowVariable});
83
+ Object.defineProperty(window, "${variableName}", {
84
+ configurable: false,
85
+ writable: false,
86
+ });
87
+ `.replace(/\s/g, '')
88
+ return source
89
+ }
90
+
91
+ export { createAppConfigPlugin }
@@ -0,0 +1,26 @@
1
+ import autoImport from 'unplugin-auto-import/vite'
2
+ import Components from 'unplugin-vue-components/vite'
3
+ import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
4
+ import { defaultSettings } from '../../../config'
5
+
6
+ const importsModules = [ 'vue', 'vue-router' ] as any
7
+
8
+ export function createAutoImport() {
9
+ const useCdnModules = defaultSettings.useCdn && defaultSettings.cdnModules.some(el => importsModules.includes(el.name))
10
+ return [
11
+ autoImport({
12
+ include: [
13
+ /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
14
+ /\.vue$/, /\.vue\?vue/, // .vue
15
+ /\.md$/ // .md
16
+ ],
17
+ imports: useCdnModules ? [] : importsModules,
18
+ dts: 'types/auto-imports.d.ts',
19
+ dirs: [ 'src/store' ]
20
+ }),
21
+ Components({
22
+ resolvers: [ AntDesignVueResolver({ importStyle: false, resolveIcons: true }) ],
23
+ dts: 'types/ant-design-import.d.ts'
24
+ })
25
+ ]
26
+ }
@@ -0,0 +1,31 @@
1
+ import type { Plugin } from 'vite'
2
+
3
+ import compressPlugin from 'vite-plugin-compression'
4
+
5
+ export function configCompressPlugin(
6
+ compress: 'gzip' | 'brotli' | 'none',
7
+ deleteOriginFile = false
8
+ ): Plugin | Plugin[] {
9
+ const compressList = compress.split(',')
10
+
11
+ const plugins: Plugin[] = []
12
+
13
+ if (compressList.includes('gzip')) {
14
+ plugins.push(
15
+ compressPlugin({
16
+ ext: '.gz',
17
+ deleteOriginFile
18
+ })
19
+ )
20
+ }
21
+ if (compressList.includes('brotli')) {
22
+ plugins.push(
23
+ compressPlugin({
24
+ ext: '.br',
25
+ algorithm: 'brotliCompress',
26
+ deleteOriginFile
27
+ })
28
+ )
29
+ }
30
+ return plugins
31
+ }