fix: optimize env config and support dynamic proxy target

This commit is contained in:
yusg
2026-01-28 11:26:01 +08:00
parent 36de38fda3
commit 885ad21184
6 changed files with 82 additions and 78 deletions

View File

@@ -1,3 +1,4 @@
NODE_ENV=development NODE_ENV=development
VITE_APP_TITLE='SmartAdmin 开发环境(Dev)' VITE_APP_TITLE='SmartAdmin 开发环境(Dev)'
VITE_APP_API_URL='http://127.0.0.1:1024' VITE_APP_API_URL='/api'
VITE_PROXY_TARGET='http://127.0.0.1:1024'

View File

@@ -1,3 +1,4 @@
NODE_ENV=development NODE_ENV=development
VITE_APP_TITLE='SmartAdmin 本地环境(Local)' VITE_APP_TITLE='SmartAdmin 本地环境(Local)'
VITE_APP_API_URL='http://127.0.0.1:1024' VITE_APP_API_URL='/api'
VITE_PROXY_TARGET='http://127.0.0.1:1024'

View File

@@ -1,3 +1,3 @@
NODE_ENV=production NODE_ENV=production
VITE_APP_TITLE='SmartAdmin 预发布环境(Pre)' VITE_APP_TITLE='SmartAdmin 预发布环境(Pre)'
VITE_APP_API_URL='https://preview.smartadmin.vip/smart-admin-api' VITE_APP_API_URL='/smart-admin-api'

View File

@@ -1,3 +1,3 @@
NODE_ENV=production NODE_ENV=production
VITE_APP_TITLE='SmartAdmin V3.X' VITE_APP_TITLE='SmartAdmin V3.X'
VITE_APP_API_URL='https://preview.smartadmin.vip/smart-admin-api' VITE_APP_API_URL='/smart-admin-api'

View File

@@ -1,3 +1,3 @@
NODE_ENV=production NODE_ENV=production
VITE_APP_TITLE='SmartAdmin 测试环境(Test)' VITE_APP_TITLE='SmartAdmin 测试环境(Test)'
VITE_APP_API_URL='http://127.0.0.1:1024' VITE_APP_API_URL='/smart-admin-api'

View File

@@ -9,91 +9,93 @@
*/ */
import { resolve } from 'path'; import { resolve } from 'path';
import vue from '@vitejs/plugin-vue'; import vue from '@vitejs/plugin-vue';
import { loadEnv } from 'vite';
import customVariables from '/@/theme/custom-variables.js'; import customVariables from '/@/theme/custom-variables.js';
const pathResolve = (dir) => { const pathResolve = (dir) => {
return resolve(__dirname, '.', dir); return resolve(__dirname, '.', dir);
}; };
export default { export default ({ mode }) => {
base: process.env.NODE_ENV === 'production' ? '/' : '/', const env = loadEnv(mode, process.cwd());
root: process.cwd(), return {
resolve: { base: process.env.NODE_ENV === 'production' ? '/' : '/',
alias: [ root: process.cwd(),
// 国际化替换 resolve: {
{ alias: [
find: 'vue-i18n', // 国际化替换
replacement: 'vue-i18n/dist/vue-i18n.cjs.js', {
}, find: 'vue-i18n',
// 绝对路径重命名:/@/xxxx => src/xxxx replacement: 'vue-i18n/dist/vue-i18n.cjs.js',
{ },
find: /\/@\//, // 绝对路径重命名:/@/xxxx => src/xxxx
replacement: pathResolve('src') + '/', {
}, find: /\/@\//,
{ replacement: pathResolve('src') + '/',
find: /^~/, },
replacement: '', {
}, find: /^~/,
], replacement: '',
}, },
server: { ],
host: '0.0.0.0', },
port: 8081,
server: { server: {
host: '0.0.0.0',
port: 8081,
proxy: { proxy: {
// 代理路径 // 代理路径
'/': { '/api': {
target: 'http://127.0.0.1:1024/', // 目标服务器地址 target: env.VITE_PROXY_TARGET, // 目标服务器地址
changeOrigin: true, // 是否修改请求头中的 Origin 字段 changeOrigin: true, // 是否修改请求头中的 Origin 字段
rewrite: (path) => path, // 重写路径 rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径
},
},
}
},
plugins: [vue()],
optimizeDeps: {
include: ['ant-design-vue/es/locale/zh_CN', 'dayjs/locale/zh-cn', 'ant-design-vue/es/locale/en_US'],
exclude: ['vue-demi'],
},
build: {
// 清除console和debugger
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
rollupOptions: {
output: {
//配置这个是让不同类型文件放在不同文件夹,不会显得太乱
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
assetFileNames: '[ext]/[name]-[hash].[ext]',
manualChunks(id) {
//静态资源分拆打包
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0].toString();
}
}, },
}, },
}, },
target: 'esnext', plugins: [vue()],
outDir: 'dist', // 指定输出路径 optimizeDeps: {
assetsDir: 'assets', // 指定生成静态文件目录 include: ['ant-design-vue/es/locale/zh_CN', 'dayjs/locale/zh-cn', 'ant-design-vue/es/locale/en_US'],
assetsInlineLimit: '4096', // 小于此阈值的导入或引用资源将内联为 base64 编码 exclude: ['vue-demi'],
chunkSizeWarningLimit: 500, // chunk 大小警告的限制 },
minify: 'terser', // 混淆器terser构建后文件体积更小 build: {
emptyOutDir: true, //打包前先清空原有打包文件 // 清除console和debugger
}, terserOptions: {
css: { compress: {
preprocessorOptions: { drop_console: true,
less: { drop_debugger: true,
modifyVars: customVariables, },
javascriptEnabled: true, },
rollupOptions: {
output: {
//配置这个是让不同类型文件放在不同文件夹,不会显得太乱
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
assetFileNames: '[ext]/[name]-[hash].[ext]',
manualChunks(id) {
//静态资源分拆打包
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0].toString();
}
},
},
},
target: 'esnext',
outDir: 'dist', // 指定输出路径
assetsDir: 'assets', // 指定生成静态文件目录
assetsInlineLimit: '4096', // 小于此阈值的导入或引用资源将内联为 base64 编码
chunkSizeWarningLimit: 500, // chunk 大小警告的限制
minify: 'terser', // 混淆器terser构建后文件体积更小
emptyOutDir: true, //打包前先清空原有打包文件
},
css: {
preprocessorOptions: {
less: {
modifyVars: customVariables,
javascriptEnabled: true,
},
}, },
}, },
}, define: {
define: { __INTLIFY_PROD_DEVTOOLS__: false,
__INTLIFY_PROD_DEVTOOLS__: false, 'process.env': process.env,
'process.env': process.env, },
}, };
}; };