Initial commit: 添加项目代码
This commit is contained in:
101
demo/frontend/vite.config.js
Normal file
101
demo/frontend/vite.config.js
Normal file
@@ -0,0 +1,101 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import { resolve } from 'path'
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': resolve(__dirname, 'src')
|
||||
}
|
||||
},
|
||||
// 生产/开发环境配置
|
||||
base: process.env.NODE_ENV === 'production' ? '/' : '/',
|
||||
|
||||
// 开发服务器配置
|
||||
server: {
|
||||
port: 8081,
|
||||
host: '0.0.0.0', // 允许外部访问
|
||||
allowedHosts: true, // 允许所有主机访问
|
||||
proxy: {
|
||||
'/api': {
|
||||
// 开发时代理到本地后端(统一为 localhost:8080)
|
||||
target: process.env.VITE_APP_API_URL || 'http://localhost:8080',
|
||||
changeOrigin: true,
|
||||
secure: false,
|
||||
// 后端服务器路径已经包含 /api,所以不需要 rewrite
|
||||
// 前端请求 /api/xxx 会转发到 http://localhost:8080/api/xxx
|
||||
// 调试时将 cookie 域改写为 localhost
|
||||
cookieDomainRewrite: 'localhost',
|
||||
cookiePathRewrite: '/',
|
||||
configure: (proxy, _options) => {
|
||||
proxy.on('error', (err, _req, _res) => {
|
||||
console.log('proxy error', err);
|
||||
});
|
||||
proxy.on('proxyReq', (proxyReq, req, _res) => {
|
||||
console.log('Sending Request to the Target:', req.method, req.url);
|
||||
});
|
||||
proxy.on('proxyRes', (proxyRes, req, _res) => {
|
||||
console.log('Received Response from the Target:', proxyRes.statusCode, req.url);
|
||||
const setCookie = proxyRes.headers['set-cookie'];
|
||||
if (setCookie) {
|
||||
console.log('Proxy Set-Cookie:', setCookie);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// public 目录配置(确保字体文件等静态资源被复制)
|
||||
publicDir: 'public',
|
||||
|
||||
// 生产环境构建配置
|
||||
build: {
|
||||
outDir: 'dist',
|
||||
assetsDir: 'static',
|
||||
copyPublicDir: true,
|
||||
// 使用 terser 压缩,移除 console
|
||||
minify: 'terser',
|
||||
terserOptions: {
|
||||
compress: {
|
||||
drop_console: true,
|
||||
drop_debugger: true
|
||||
}
|
||||
},
|
||||
// 启用 CSS 代码分割
|
||||
cssCodeSplit: true,
|
||||
// 禁用 source map
|
||||
sourcemap: false,
|
||||
// 代码分割优化
|
||||
rollupOptions: {
|
||||
output: {
|
||||
// 为所有资源文件(包括SVG)生成内容哈希
|
||||
assetFileNames: (assetInfo) => {
|
||||
// 获取文件扩展名
|
||||
const extType = assetInfo.name.split('.').pop();
|
||||
// 图片类型(包括SVG)
|
||||
if (/png|jpe?g|gif|svg|webp|ico/i.test(extType)) {
|
||||
return `static/images/[name]-[hash][extname]`;
|
||||
}
|
||||
// 字体类型
|
||||
if (/woff2?|eot|ttf|otf/i.test(extType)) {
|
||||
return `static/fonts/[name]-[hash][extname]`;
|
||||
}
|
||||
// 其他资源
|
||||
return `static/[name]-[hash][extname]`;
|
||||
},
|
||||
// JS文件哈希
|
||||
chunkFileNames: 'static/js/[name]-[hash].js',
|
||||
entryFileNames: 'static/js/[name]-[hash].js',
|
||||
manualChunks: {
|
||||
'vue-vendor': ['vue', 'vue-router', 'pinia'],
|
||||
'antd': ['ant-design-vue', '@ant-design/icons-vue'],
|
||||
'utils': ['axios']
|
||||
}
|
||||
}
|
||||
},
|
||||
// 块大小警告限制
|
||||
chunkSizeWarningLimit: 1000
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user