refactor(vite): 为移动端和屏幕构建增强基础路径处理

引入实用函数,动态地标准化和解析基础路径,允许通过 CLI 标志、环境变量或预设默认值进行配置。此更新在不改变核心功能的情况下,简化了跨不同环境的部署。
This commit is contained in:
Zzc 2025-11-06 14:57:36 +08:00
parent ce9614295d
commit ca347bd223
2 changed files with 166 additions and 68 deletions

View File

@ -1,37 +1,86 @@
import { defineConfig } from 'vite' import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import { resolve } from 'path' import { resolve } from 'path'
import Components from 'unplugin-vue-components/vite' import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers' import { VantResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({ const DEFAULT_BUILD_BASE = '/bxztapp/'
base: process.env.NODE_ENV === 'production' ? '/bxztapp/' : '/',
plugins: [ const normalizeBasePath = (value) => {
vue(), if (!value || value === '/') {
Components({ return '/'
resolvers: [VantResolver()] }
}) let base = value.trim()
], if (!base.startsWith('/')) {
resolve: { base = `/${base}`
alias: { }
'@': resolve(__dirname, 'src'), if (!base.endsWith('/')) {
'@shared': resolve(__dirname, '../shared') base = `${base}/`
}
return base
}
const resolveCliBase = () => {
const argv = process.argv || []
const directFlagIndex = argv.indexOf('--base')
if (directFlagIndex !== -1 && argv[directFlagIndex + 1]) {
return argv[directFlagIndex + 1]
}
const customFlagIndex = argv.indexOf('--basePath')
if (customFlagIndex !== -1 && argv[customFlagIndex + 1]) {
return argv[customFlagIndex + 1]
}
const equalArg = argv.find(arg => arg.startsWith('--base='))
if (equalArg) {
return equalArg.split('=')[1]
}
const equalCustomArg = argv.find(arg => arg.startsWith('--basePath='))
if (equalCustomArg) {
return equalCustomArg.split('=')[1]
}
return undefined
}
export default defineConfig(({ command, mode }) => {
const env = loadEnv(mode, process.cwd(), '')
const baseCandidate =
command === 'build'
? resolveCliBase() ??
env.VITE_BASE_PATH ??
env.BASE_PATH ??
process.env.BASE_PATH ??
DEFAULT_BUILD_BASE
: '/'
return {
base: process.env.NODE_ENV === 'production' ? normalizeBasePath(baseCandidate) : '/',
plugins: [
vue(),
Components({
resolvers: [VantResolver()]
})
],
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
'@shared': resolve(__dirname, '../shared')
}
},
server: {
port: 8080,
host: '0.0.0.0',
open: true,
proxy: {
'/snow-ops-platform': {
target: 'http://8.137.54.85:8661/',
changeOrigin: true,
},
}
},
build: {
outDir: 'dist',
assetsDir: 'assets',
sourcemap: false
} }
},
server: {
port: 8080,
host: '0.0.0.0',
open: true,
proxy: {
'/snow-ops-platform': {
target: 'http://8.137.54.85:8661/',
changeOrigin: true,
},
}
},
build: {
outDir: 'dist',
assetsDir: 'assets',
sourcemap: false
} }
}) })

View File

@ -1,48 +1,97 @@
import { defineConfig } from 'vite' import { defineConfig, loadEnv } from 'vite'
import AutoImport from 'unplugin-auto-import/vite' import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite' import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import { resolve } from 'path' import { resolve } from 'path'
export default defineConfig({ const DEFAULT_BUILD_BASE = '/bxztpc/'
base: process.env.NODE_ENV === 'production' ? '/bxztpc/' : '/',
plugins: [ const normalizeBasePath = (value) => {
vue(), if (!value || value === '/') {
AutoImport({ return '/'
resolvers: [ElementPlusResolver()], }
}), let base = value.trim()
Components({ if (!base.startsWith('/')) {
resolvers: [ElementPlusResolver()], base = `/${base}`
}), }
], if (!base.endsWith('/')) {
resolve: { base = `${base}/`
alias: { }
'@': resolve(__dirname, 'src'), return base
'@shared': resolve(__dirname, '../shared') }
}
}, const resolveCliBase = () => {
server: { const argv = process.argv || []
port: 3000, const directFlagIndex = argv.indexOf('--base')
open: true, if (directFlagIndex !== -1 && argv[directFlagIndex + 1]) {
cors: true, return argv[directFlagIndex + 1]
proxy: { }
'/snow-ops-platform': { const customFlagIndex = argv.indexOf('--basePath')
target: 'http://8.137.54.85:8661/', if (customFlagIndex !== -1 && argv[customFlagIndex + 1]) {
changeOrigin: true, return argv[customFlagIndex + 1]
}, }
} const equalArg = argv.find(arg => arg.startsWith('--base='))
}, if (equalArg) {
build: { return equalArg.split('=')[1]
outDir: 'dist', }
assetsDir: 'assets', const equalCustomArg = argv.find(arg => arg.startsWith('--basePath='))
sourcemap: false, if (equalCustomArg) {
minify: 'terser', return equalCustomArg.split('=')[1]
rollupOptions: { }
output: { return undefined
chunkFileNames: 'js/[name]-[hash].js', }
entryFileNames: 'js/[name]-[hash].js',
assetFileNames: '[ext]/[name]-[hash].[ext]' export default defineConfig(({ command, mode }) => {
const env = loadEnv(mode, process.cwd(), '')
const baseCandidate =
command === 'build'
? resolveCliBase() ??
env.VITE_BASE_PATH ??
env.BASE_PATH ??
process.env.BASE_PATH ??
DEFAULT_BUILD_BASE
: '/'
return {
base: process.env.NODE_ENV === 'production' ? normalizeBasePath(baseCandidate) : '/',
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
],
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
'@shared': resolve(__dirname, '../shared')
}
},
server: {
port: 3000,
open: true,
cors: true,
proxy: {
'/snow-ops-platform': {
target: 'http://8.137.54.85:8661/',
changeOrigin: true,
},
}
},
build: {
outDir: 'dist',
assetsDir: 'assets',
sourcemap: false,
minify: 'terser',
rollupOptions: {
output: {
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
assetFileNames: '[ext]/[name]-[hash].[ext]'
}
} }
} }
} }