@gx-design-vue/create-gx-cli 0.1.12 → 0.1.14
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/create-gx-cli +3 -2
- package/package.json +4 -4
- package/src/cli.js +9 -7
- package/src/git.js +8 -5
- package/src/main.js +29 -16
- package/template-mobile-vant-cli/package.json +5 -5
- package/template-gx-design-thin/.editorconfig +0 -19
- package/template-gx-design-thin/.env +0 -4
- package/template-gx-design-thin/.env.development +0 -15
- package/template-gx-design-thin/.env.production +0 -28
- package/template-gx-design-thin/.eslintignore +0 -16
- package/template-gx-design-thin/.prettierignore +0 -9
- package/template-gx-design-thin/LICENSE +0 -21
- package/template-gx-design-thin/README.md +0 -112
- package/template-gx-design-thin/build/constant.ts +0 -1
- package/template-gx-design-thin/build/generate/generateModifyVars.ts +0 -14
- package/template-gx-design-thin/build/rollupOptions/index.ts +0 -22
- package/template-gx-design-thin/build/util/hash.ts +0 -17
- package/template-gx-design-thin/build/util/index.ts +0 -131
- package/template-gx-design-thin/build/vite/cdn.ts +0 -63
- package/template-gx-design-thin/build/vite/optimizer.ts +0 -26
- package/template-gx-design-thin/build/vite/plugin/appConfig.ts +0 -91
- package/template-gx-design-thin/build/vite/plugin/autoImport.ts +0 -26
- package/template-gx-design-thin/build/vite/plugin/compress.ts +0 -31
- package/template-gx-design-thin/build/vite/plugin/html.ts +0 -39
- package/template-gx-design-thin/build/vite/plugin/index.ts +0 -75
- package/template-gx-design-thin/build/vite/plugin/mock.ts +0 -14
- package/template-gx-design-thin/build/vite/plugin/pwa.ts +0 -31
- package/template-gx-design-thin/build/vite/plugin/visualizer.ts +0 -14
- package/template-gx-design-thin/build/vite/plugin/viteMock/client.ts +0 -88
- package/template-gx-design-thin/build/vite/plugin/viteMock/createMockServer.ts +0 -271
- package/template-gx-design-thin/build/vite/plugin/viteMock/index.ts +0 -69
- package/template-gx-design-thin/build/vite/plugin/viteMock/types.ts +0 -48
- package/template-gx-design-thin/build/vite/plugin/viteMock/utils.ts +0 -48
- package/template-gx-design-thin/build/vite/plugin/viteNotice.ts +0 -40
- package/template-gx-design-thin/commitlint.config.cjs +0 -32
- package/template-gx-design-thin/config/default/defaultSettings.ts +0 -78
- package/template-gx-design-thin/config/default/network.ts +0 -10
- package/template-gx-design-thin/config/default/proxy.ts +0 -47
- package/template-gx-design-thin/config/default/theme.ts +0 -3
- package/template-gx-design-thin/config/index.ts +0 -11
- package/template-gx-design-thin/eslint.config.js +0 -51
- package/template-gx-design-thin/index.html +0 -42
- package/template-gx-design-thin/mock/_createProductionServer.ts +0 -19
- package/template-gx-design-thin/mock/_util.ts +0 -33
- package/template-gx-design-thin/mock/config/menu.ts +0 -21
- package/template-gx-design-thin/mock/config/user.ts +0 -123
- package/template-gx-design-thin/mock/datasSource/system/menu.ts +0 -10
- package/template-gx-design-thin/mock/datasSource/user/account.ts +0 -30
- package/template-gx-design-thin/mock/datasSource/user/index.ts +0 -47
- package/template-gx-design-thin/mock/util/crypto.ts +0 -23
- package/template-gx-design-thin/mock/util/table.ts +0 -92
- package/template-gx-design-thin/mock/util/utils.ts +0 -73
- package/template-gx-design-thin/package.json +0 -129
- package/template-gx-design-thin/pnpm-lock.yaml +0 -12575
- package/template-gx-design-thin/prettier.config.cjs +0 -18
- package/template-gx-design-thin/public/resource/css/index.css +0 -119
- package/template-gx-design-thin/public/resource/css/normalize.css +0 -396
- package/template-gx-design-thin/public/resource/img/favicon.ico +0 -0
- package/template-gx-design-thin/public/resource/img/logo.png +0 -0
- package/template-gx-design-thin/public/resource/img/pro_icon.svg +0 -1
- package/template-gx-design-thin/public/resource/img/pwa-192x192.png +0 -0
- package/template-gx-design-thin/public/resource/img/pwa-512x512.png +0 -0
- package/template-gx-design-thin/src/App.vue +0 -42
- package/template-gx-design-thin/src/assets/error_images/403.png +0 -0
- package/template-gx-design-thin/src/assets/error_images/404.png +0 -0
- package/template-gx-design-thin/src/assets/error_images/cloud.png +0 -0
- package/template-gx-design-thin/src/assets/login_images/login_background.svg +0 -1
- package/template-gx-design-thin/src/assets/logo.png +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.css +0 -94
- package/template-gx-design-thin/src/assets/menu_font/iconfont.eot +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.js +0 -1
- package/template-gx-design-thin/src/assets/menu_font/iconfont.json +0 -142
- package/template-gx-design-thin/src/assets/menu_font/iconfont.svg +0 -1
- package/template-gx-design-thin/src/assets/menu_font/iconfont.ttf +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.woff +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.woff2 +0 -0
- package/template-gx-design-thin/src/assets/menu_font/index.less +0 -94
- package/template-gx-design-thin/src/assets/public_icon/iconfont.css +0 -42
- package/template-gx-design-thin/src/assets/public_icon/iconfont.eot +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.js +0 -1
- package/template-gx-design-thin/src/assets/public_icon/iconfont.json +0 -51
- package/template-gx-design-thin/src/assets/public_icon/iconfont.svg +0 -1
- package/template-gx-design-thin/src/assets/public_icon/iconfont.ttf +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.woff +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.woff2 +0 -0
- package/template-gx-design-thin/src/assets/public_icon/index.less +0 -42
- package/template-gx-design-thin/src/assets/public_images/nodata.svg +0 -1
- package/template-gx-design-thin/src/common/global.ts +0 -4
- package/template-gx-design-thin/src/components/GDesign/Result/index.tsx +0 -144
- package/template-gx-design-thin/src/components/GDesign/Result/style.less +0 -140
- package/template-gx-design-thin/src/components/GDesign/utils/index.ts +0 -7
- package/template-gx-design-thin/src/components/GlobalLayout/Confirm/index.ts +0 -21
- package/template-gx-design-thin/src/components/GlobalLayout/Empty/index.vue +0 -18
- package/template-gx-design-thin/src/components/GlobalLayout/RightContent/index.tsx +0 -126
- package/template-gx-design-thin/src/components/GlobalLayout/RightContent/style.ts +0 -77
- package/template-gx-design-thin/src/components/GlobalLayout/Spin/index.tsx +0 -30
- package/template-gx-design-thin/src/components/PageLoading/index.tsx +0 -51
- package/template-gx-design-thin/src/components/index.ts +0 -6
- package/template-gx-design-thin/src/core/ant-design/index.ts +0 -10
- package/template-gx-design-thin/src/core/gx-admin-design/index.ts +0 -6
- package/template-gx-design-thin/src/core/gx-design/index.ts +0 -6
- package/template-gx-design-thin/src/core/gx-pro-design/index.ts +0 -8
- package/template-gx-design-thin/src/core/index.ts +0 -84
- package/template-gx-design-thin/src/design/ant-design/index.less +0 -4
- package/template-gx-design-thin/src/design/ant-design/layout.less +0 -22
- package/template-gx-design-thin/src/design/ant-design/menu.less +0 -48
- package/template-gx-design-thin/src/design/ant-design/spin.less +0 -23
- package/template-gx-design-thin/src/design/ant-design/tooltip.less +0 -7
- package/template-gx-design-thin/src/design/color.less +0 -1
- package/template-gx-design-thin/src/design/config.less +0 -5
- package/template-gx-design-thin/src/design/imageEditor.less +0 -180
- package/template-gx-design-thin/src/design/index.less +0 -95
- package/template-gx-design-thin/src/design/mixin.less +0 -65
- package/template-gx-design-thin/src/design/normalize.less +0 -391
- package/template-gx-design-thin/src/design/root.less +0 -3
- package/template-gx-design-thin/src/hooks/core/index.ts +0 -3
- package/template-gx-design-thin/src/hooks/core/useRequest/index.ts +0 -118
- package/template-gx-design-thin/src/hooks/event/index.ts +0 -3
- package/template-gx-design-thin/src/hooks/event/useClipboard.ts +0 -15
- package/template-gx-design-thin/src/hooks/web/index.ts +0 -5
- package/template-gx-design-thin/src/hooks/web/useThemeStyle.ts +0 -16
- package/template-gx-design-thin/src/layout/BasicLayout.vue +0 -123
- package/template-gx-design-thin/src/layout/BlankLayout.vue +0 -5
- package/template-gx-design-thin/src/layout/ContentView.vue +0 -50
- package/template-gx-design-thin/src/layout/IframeView.vue +0 -1
- package/template-gx-design-thin/src/layout/UserLayout.vue +0 -7
- package/template-gx-design-thin/src/main.ts +0 -34
- package/template-gx-design-thin/src/plugins/index.ts +0 -2
- package/template-gx-design-thin/src/router/guard/index.ts +0 -83
- package/template-gx-design-thin/src/router/guard/permissions.ts +0 -70
- package/template-gx-design-thin/src/router/guard/stateGuard.ts +0 -10
- package/template-gx-design-thin/src/router/helper/routeHelper.ts +0 -223
- package/template-gx-design-thin/src/router/helper/utils.ts +0 -19
- package/template-gx-design-thin/src/router/index.ts +0 -31
- package/template-gx-design-thin/src/router/routes/index.ts +0 -86
- package/template-gx-design-thin/src/router/routes/modules/dataSource.ts +0 -12
- package/template-gx-design-thin/src/services/common/index.ts +0 -11
- package/template-gx-design-thin/src/services/systemCenter/index.ts +0 -1
- package/template-gx-design-thin/src/services/systemCenter/menu.ts +0 -9
- package/template-gx-design-thin/src/services/userCenter/account.ts +0 -42
- package/template-gx-design-thin/src/services/userCenter/index.ts +0 -28
- package/template-gx-design-thin/src/store/index.ts +0 -32
- package/template-gx-design-thin/src/store/modules/dict.ts +0 -28
- package/template-gx-design-thin/src/store/modules/global.ts +0 -42
- package/template-gx-design-thin/src/store/modules/permission.ts +0 -19
- package/template-gx-design-thin/src/store/modules/routes.ts +0 -113
- package/template-gx-design-thin/src/store/modules/tabsRouter.ts +0 -76
- package/template-gx-design-thin/src/store/modules/user.ts +0 -136
- package/template-gx-design-thin/src/utils/accessToken.ts +0 -80
- package/template-gx-design-thin/src/utils/crypto/base64.ts +0 -101
- package/template-gx-design-thin/src/utils/crypto/index.ts +0 -57
- package/template-gx-design-thin/src/utils/env.ts +0 -50
- package/template-gx-design-thin/src/utils/fetchFile.ts +0 -81
- package/template-gx-design-thin/src/utils/index.ts +0 -123
- package/template-gx-design-thin/src/utils/pageTitle.ts +0 -20
- package/template-gx-design-thin/src/utils/request/XHR.ts +0 -139
- package/template-gx-design-thin/src/utils/request/axiosCancel.ts +0 -69
- package/template-gx-design-thin/src/utils/request/checkStatus.ts +0 -25
- package/template-gx-design-thin/src/utils/request/index.ts +0 -144
- package/template-gx-design-thin/src/utils/request/typings.ts +0 -171
- package/template-gx-design-thin/src/utils/storage.ts +0 -199
- package/template-gx-design-thin/src/utils/uploadFile.ts +0 -27
- package/template-gx-design-thin/src/utils/util.ts +0 -198
- package/template-gx-design-thin/src/utils/validate.ts +0 -216
- package/template-gx-design-thin/src/views/Iframe/index.vue +0 -76
- package/template-gx-design-thin/src/views/Page/one.vue +0 -13
- package/template-gx-design-thin/src/views/Page/two.vue +0 -13
- package/template-gx-design-thin/src/views/exception/403/index.vue +0 -7
- package/template-gx-design-thin/src/views/exception/404/index.vue +0 -9
- package/template-gx-design-thin/src/views/user/login/index.vue +0 -109
- package/template-gx-design-thin/src/views/user/login/style.less +0 -38
- package/template-gx-design-thin/tsconfig.json +0 -46
- package/template-gx-design-thin/types/ant-design-import.d.ts +0 -99
- package/template-gx-design-thin/types/auto-imports.d.ts +0 -81
- package/template-gx-design-thin/types/components.d.ts +0 -24
- package/template-gx-design-thin/types/config.d.ts +0 -44
- package/template-gx-design-thin/types/global.d.ts +0 -97
- package/template-gx-design-thin/types/mock.d.ts +0 -16
- package/template-gx-design-thin/types/module.d.ts +0 -20
- package/template-gx-design-thin/types/response.d.ts +0 -15
- package/template-gx-design-thin/unocss.config.ts +0 -101
- package/template-gx-design-thin/vite.config.ts +0 -120
- package/template-gx-design-thin/yarn.lock +0 -9492
@@ -1,131 +0,0 @@
|
|
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
|
-
}
|
@@ -1,63 +0,0 @@
|
|
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()
|
@@ -1,26 +0,0 @@
|
|
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
|
-
}
|
@@ -1,91 +0,0 @@
|
|
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 }
|
@@ -1,26 +0,0 @@
|
|
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
|
-
}
|
@@ -1,31 +0,0 @@
|
|
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
|
-
}
|
@@ -1,39 +0,0 @@
|
|
1
|
-
import type { PluginOption } from 'vite'
|
2
|
-
import { createHtmlPlugin } from 'vite-plugin-html'
|
3
|
-
|
4
|
-
import cdnModules from '../cdn'
|
5
|
-
import { GLOB_CONFIG_FILE_NAME } from '../../constant'
|
6
|
-
import { defaultSettings } from '../../../config'
|
7
|
-
import pkg from '../../../package.json'
|
8
|
-
|
9
|
-
const { title, publicPath, useCdn } = defaultSettings
|
10
|
-
|
11
|
-
export function configHtmlPlugin(_: ViteEnv, isBuild: boolean) {
|
12
|
-
const path = publicPath.endsWith('/') ? publicPath : `${publicPath}/`
|
13
|
-
|
14
|
-
const getAppConfigSrc = () => {
|
15
|
-
return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`
|
16
|
-
}
|
17
|
-
|
18
|
-
const htmlPlugin: PluginOption[] = createHtmlPlugin({
|
19
|
-
minify: isBuild,
|
20
|
-
inject: {
|
21
|
-
// Inject data into ejs template
|
22
|
-
data: {
|
23
|
-
VUE_APP_TITLE: title,
|
24
|
-
injectScript: useCdn && isBuild ? cdnModules.map(e => e.js).filter(el => el) : [],
|
25
|
-
injectLink: useCdn && isBuild ? cdnModules.map(e => e.css).filter(el => el) : []
|
26
|
-
},
|
27
|
-
// Embed the generated app.config.js file
|
28
|
-
tags: isBuild
|
29
|
-
? [
|
30
|
-
{
|
31
|
-
tag: 'script',
|
32
|
-
attrs: { src: getAppConfigSrc() }
|
33
|
-
}
|
34
|
-
]
|
35
|
-
: []
|
36
|
-
}
|
37
|
-
})
|
38
|
-
return htmlPlugin
|
39
|
-
}
|
@@ -1,75 +0,0 @@
|
|
1
|
-
import type { PluginOption } from 'vite'
|
2
|
-
|
3
|
-
import vue from '@vitejs/plugin-vue'
|
4
|
-
import vueJsx from '@vitejs/plugin-vue-jsx'
|
5
|
-
import VueDevTools from 'vite-plugin-vue-devtools'
|
6
|
-
import legacy from '@vitejs/plugin-legacy'
|
7
|
-
|
8
|
-
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
|
9
|
-
|
10
|
-
import Unocss from 'unocss/vite'
|
11
|
-
|
12
|
-
import { configPwaConfig } from './pwa'
|
13
|
-
import { configHtmlPlugin } from './html'
|
14
|
-
import { configMockPlugin } from './mock'
|
15
|
-
import viteNotice from './viteNotice'
|
16
|
-
import { createAutoImport } from './autoImport'
|
17
|
-
import { configCompressPlugin } from './compress'
|
18
|
-
import { createAppConfigPlugin } from './appConfig'
|
19
|
-
import { configVisualizerConfig } from './visualizer'
|
20
|
-
|
21
|
-
export async function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
|
22
|
-
const {
|
23
|
-
VITE_APP_ENV,
|
24
|
-
VITE_USE_MOCK,
|
25
|
-
VITE_LEGACY,
|
26
|
-
VITE_BUILD_COMPRESS,
|
27
|
-
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE
|
28
|
-
} = viteEnv
|
29
|
-
|
30
|
-
const isDev = VITE_APP_ENV === 'dev'
|
31
|
-
|
32
|
-
const vitePlugins: PluginOption[] = [
|
33
|
-
// have to
|
34
|
-
vue(),
|
35
|
-
// have to
|
36
|
-
vueJsx()
|
37
|
-
]
|
38
|
-
|
39
|
-
// vite-plugin-app-info
|
40
|
-
vitePlugins.push(await createAppConfigPlugin({ isBuild }))
|
41
|
-
// vite-plugin-vue-devtools
|
42
|
-
vitePlugins.push(VueDevTools() as any)
|
43
|
-
// vite-plugin-windicss
|
44
|
-
vitePlugins.push(Unocss())
|
45
|
-
// vite-plugin-vue-setup-extend
|
46
|
-
vitePlugins.push(vueSetupExtend())
|
47
|
-
// @vitejs/plugin-legacy
|
48
|
-
VITE_LEGACY && isBuild && vitePlugins.push(legacy())
|
49
|
-
// vite-plugin-html
|
50
|
-
vitePlugins.push(configHtmlPlugin(viteEnv, isBuild))
|
51
|
-
// vite-plugin-build-info
|
52
|
-
vitePlugins.push(await viteNotice())
|
53
|
-
// vite-plugin-mock
|
54
|
-
const useMock = isDev || VITE_USE_MOCK
|
55
|
-
useMock && vitePlugins.push(configMockPlugin())
|
56
|
-
|
57
|
-
// rollup-plugin-visualizer
|
58
|
-
vitePlugins.push(configVisualizerConfig())
|
59
|
-
|
60
|
-
// unplugin-auto-import/vite
|
61
|
-
vitePlugins.push(createAutoImport())
|
62
|
-
|
63
|
-
// The following plugins only work in the production environment
|
64
|
-
if (isBuild) {
|
65
|
-
// rollup-plugin-gzip
|
66
|
-
vitePlugins.push(
|
67
|
-
configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE)
|
68
|
-
)
|
69
|
-
|
70
|
-
// vite-plugin-pwa
|
71
|
-
vitePlugins.push(configPwaConfig(viteEnv))
|
72
|
-
}
|
73
|
-
|
74
|
-
return vitePlugins
|
75
|
-
}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
import { viteMockServe } from './viteMock'
|
2
|
-
|
3
|
-
export function configMockPlugin() {
|
4
|
-
return viteMockServe({
|
5
|
-
ignore: /^_/,
|
6
|
-
mockPath: 'mock',
|
7
|
-
enable: true,
|
8
|
-
injectCode: `
|
9
|
-
import { setupProdMockServer } from '../mock/_createProductionServer';
|
10
|
-
|
11
|
-
setupProdMockServer();
|
12
|
-
`,
|
13
|
-
})
|
14
|
-
}
|
@@ -1,31 +0,0 @@
|
|
1
|
-
import { VitePWA } from 'vite-plugin-pwa'
|
2
|
-
|
3
|
-
import { defaultSettings } from '../../../config'
|
4
|
-
|
5
|
-
export function configPwaConfig(env: ViteEnv) {
|
6
|
-
const { title, shortName } = defaultSettings
|
7
|
-
const { VITE_USE_PWA } = env
|
8
|
-
|
9
|
-
if (VITE_USE_PWA) {
|
10
|
-
const pwaPlugin = VitePWA({
|
11
|
-
manifest: {
|
12
|
-
name: title || 'GX Pro Admin',
|
13
|
-
short_name: shortName || 'gx_pro_admin',
|
14
|
-
icons: [
|
15
|
-
{
|
16
|
-
src: './resource/img/pwa-192x192.png',
|
17
|
-
sizes: '192x192',
|
18
|
-
type: 'image/png'
|
19
|
-
},
|
20
|
-
{
|
21
|
-
src: './resource/img/pwa-512x512.png',
|
22
|
-
sizes: '512x512',
|
23
|
-
type: 'image/png'
|
24
|
-
}
|
25
|
-
]
|
26
|
-
}
|
27
|
-
})
|
28
|
-
return pwaPlugin
|
29
|
-
}
|
30
|
-
return []
|
31
|
-
}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
import { visualizer } from 'rollup-plugin-visualizer'
|
2
|
-
import { isReportMode } from '../../util'
|
3
|
-
|
4
|
-
export function configVisualizerConfig() {
|
5
|
-
if (isReportMode()) {
|
6
|
-
return visualizer({
|
7
|
-
filename: './node_modules/.cache/visualizer/stats.html',
|
8
|
-
open: true,
|
9
|
-
gzipSize: true,
|
10
|
-
brotliSize: true
|
11
|
-
}) as Plugin
|
12
|
-
}
|
13
|
-
return []
|
14
|
-
}
|
@@ -1,88 +0,0 @@
|
|
1
|
-
import mockJs from 'mockjs'
|
2
|
-
import { pathToRegexp } from 'path-to-regexp'
|
3
|
-
|
4
|
-
const Mock = mockJs as any
|
5
|
-
|
6
|
-
export function createProdMockServer(mockList: any[]) {
|
7
|
-
Mock.XHR.prototype.__send = Mock.XHR.prototype.send
|
8
|
-
Mock.XHR.prototype.send = function () {
|
9
|
-
if (this.custom.xhr) {
|
10
|
-
this.custom.xhr.withCredentials = this.withCredentials || false
|
11
|
-
|
12
|
-
if (this.responseType) {
|
13
|
-
this.custom.xhr.responseType = this.responseType
|
14
|
-
}
|
15
|
-
}
|
16
|
-
if (this.custom.requestHeaders) {
|
17
|
-
const headers: any = {}
|
18
|
-
for (let k in this.custom.requestHeaders) {
|
19
|
-
headers[k.toString().toLowerCase()] = this.custom.requestHeaders[k]
|
20
|
-
}
|
21
|
-
this.custom.options = Object.assign({}, this.custom.options, { headers })
|
22
|
-
}
|
23
|
-
this.__send.apply(this, arguments)
|
24
|
-
}
|
25
|
-
|
26
|
-
Mock.XHR.prototype.proxy_open = Mock.XHR.prototype.open
|
27
|
-
|
28
|
-
Mock.XHR.prototype.open = function () {
|
29
|
-
let responseType = this.responseType
|
30
|
-
this.proxy_open(...arguments)
|
31
|
-
if (this.custom.xhr) {
|
32
|
-
if (responseType) {
|
33
|
-
this.custom.xhr.responseType = responseType
|
34
|
-
}
|
35
|
-
}
|
36
|
-
}
|
37
|
-
|
38
|
-
for (const { url, method, response, timeout } of mockList) {
|
39
|
-
__setupMock__(timeout)
|
40
|
-
Mock.mock(
|
41
|
-
pathToRegexp(url, undefined, { end: false }),
|
42
|
-
method || 'get',
|
43
|
-
__XHR2ExpressReqWrapper__(response)
|
44
|
-
)
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
function __param2Obj__(url: string) {
|
49
|
-
const search = url.split('?')[1]
|
50
|
-
if (!search) {
|
51
|
-
return {}
|
52
|
-
}
|
53
|
-
return JSON.parse(
|
54
|
-
'{"' +
|
55
|
-
decodeURIComponent(search)
|
56
|
-
.replace(/"/g, '\\"')
|
57
|
-
.replace(/&/g, '","')
|
58
|
-
.replace(/=/g, '":"')
|
59
|
-
.replace(/\+/g, ' ') +
|
60
|
-
'"}'
|
61
|
-
)
|
62
|
-
}
|
63
|
-
|
64
|
-
function __XHR2ExpressReqWrapper__(handle: (d: any) => any) {
|
65
|
-
return function (options: any) {
|
66
|
-
let result = null
|
67
|
-
if (typeof handle === 'function') {
|
68
|
-
const { body, type, url, headers } = options
|
69
|
-
result = handle({
|
70
|
-
method: type,
|
71
|
-
body: JSON.parse(body),
|
72
|
-
query: __param2Obj__(url),
|
73
|
-
headers
|
74
|
-
})
|
75
|
-
} else {
|
76
|
-
result = handle
|
77
|
-
}
|
78
|
-
|
79
|
-
return Mock.mock(result)
|
80
|
-
}
|
81
|
-
}
|
82
|
-
|
83
|
-
function __setupMock__(timeout = 0) {
|
84
|
-
timeout &&
|
85
|
-
Mock.setup({
|
86
|
-
timeout
|
87
|
-
})
|
88
|
-
}
|