diff --git a/packages/mobile/vite.config.js b/packages/mobile/vite.config.js index e957a82..3043b4f 100644 --- a/packages/mobile/vite.config.js +++ b/packages/mobile/vite.config.js @@ -1,37 +1,86 @@ -import { defineConfig } from 'vite' +import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' import Components from 'unplugin-vue-components/vite' import { VantResolver } from 'unplugin-vue-components/resolvers' -export default defineConfig({ - base: process.env.NODE_ENV === 'production' ? '/bxztapp/' : '/', - plugins: [ - vue(), - Components({ - resolvers: [VantResolver()] - }) - ], - resolve: { - alias: { - '@': resolve(__dirname, 'src'), - '@shared': resolve(__dirname, '../shared') +const DEFAULT_BUILD_BASE = '/bxztapp/' + +const normalizeBasePath = (value) => { + if (!value || value === '/') { + return '/' + } + let base = value.trim() + if (!base.startsWith('/')) { + base = `/${base}` + } + if (!base.endsWith('/')) { + 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 } }) diff --git a/packages/screen/vite.config.js b/packages/screen/vite.config.js index 2eef6f6..b4fb833 100644 --- a/packages/screen/vite.config.js +++ b/packages/screen/vite.config.js @@ -1,48 +1,97 @@ -import { defineConfig } from 'vite' +import { defineConfig, loadEnv } from 'vite' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' -export default defineConfig({ - base: process.env.NODE_ENV === 'production' ? '/bxztpc/' : '/', - 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]' +const DEFAULT_BUILD_BASE = '/bxztpc/' + +const normalizeBasePath = (value) => { + if (!value || value === '/') { + return '/' + } + let base = value.trim() + if (!base.startsWith('/')) { + base = `/${base}` + } + if (!base.endsWith('/')) { + 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(), + 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]' + } } } }