148 lines
4.5 KiB
TypeScript
148 lines
4.5 KiB
TypeScript
import { defineConfig } from "vite";
|
||
import vue from "@vitejs/plugin-vue";
|
||
import path from "path";
|
||
import viteCompression from "vite-plugin-compression";
|
||
import { ViteImageOptimizer } from "vite-plugin-image-optimizer";
|
||
import { fontConfig } from "./src/config/font";
|
||
|
||
import cesium from 'vite-plugin-cesium'
|
||
|
||
export default defineConfig({
|
||
base: "/",
|
||
build: {
|
||
outDir: "dist",
|
||
assetsDir: "assets",
|
||
minify: "terser",
|
||
sourcemap: false,
|
||
chunkSizeWarningLimit: 1500,
|
||
terserOptions: {
|
||
compress: {
|
||
drop_console: true,
|
||
drop_debugger: true,
|
||
pure_funcs: ["console.log"],
|
||
},
|
||
format: {
|
||
comments: /@license/i,
|
||
},
|
||
},
|
||
rollupOptions: {
|
||
output: {
|
||
manualChunks: {
|
||
vendor: ["vue", "vue-router"],
|
||
},
|
||
chunkFileNames: "assets/js/[name]-[hash].js",
|
||
entryFileNames: "assets/js/[name]-[hash].js",
|
||
assetFileNames: "assets/[ext]/[name]-[hash].[ext]",
|
||
},
|
||
},
|
||
cssCodeSplit: true,
|
||
cssMinify: true,
|
||
},
|
||
plugins: [
|
||
cesium(),
|
||
vue(),
|
||
viteCompression({
|
||
verbose: true,
|
||
disable: false,
|
||
threshold: 10240,
|
||
algorithm: "gzip",
|
||
ext: ".gz",
|
||
}),
|
||
ViteImageOptimizer({
|
||
test: /\.(jpe?g|png|gif|svg)$/i,
|
||
exclude: undefined,
|
||
include: undefined,
|
||
includePublic: true,
|
||
logStats: true,
|
||
ansiColors: true,
|
||
svg: {
|
||
multipass: true,
|
||
plugins: [
|
||
{
|
||
name: "preset-default",
|
||
params: {
|
||
overrides: {
|
||
removeViewBox: false,
|
||
removeEmptyAttrs: false,
|
||
},
|
||
},
|
||
},
|
||
],
|
||
},
|
||
png: {
|
||
quality: 80,
|
||
},
|
||
jpeg: {
|
||
quality: 80,
|
||
},
|
||
jpg: {
|
||
quality: 80,
|
||
},
|
||
tiff: {
|
||
quality: 80,
|
||
},
|
||
gif: undefined,
|
||
webp: {
|
||
quality: 80,
|
||
},
|
||
avif: {
|
||
quality: 80,
|
||
},
|
||
}),
|
||
],
|
||
resolve: {
|
||
alias: {
|
||
"@": path.resolve(__dirname, "src"),
|
||
},
|
||
},
|
||
server: {
|
||
host: "0.0.0.0", // 监听所有网络接口
|
||
port: 5173, // 确保端口设置正确
|
||
allowedHosts: ["w.godserver.cn",'godserver.cn','www.godserver.cn','rbq.college'], // 允许的主机列表
|
||
proxy: {
|
||
"/api": {
|
||
target: "http://127.0.0.1:8080", // 注意这里去掉了后面的/api,Vite会自动拼接
|
||
changeOrigin: true, // 关键:修改请求头中的Origin为目标服务器地址
|
||
rewrite: (path) => path.replace(/^\/api/, '/api'), // 保留/api前缀
|
||
headers: {
|
||
// 添加可能需要的请求头,解决403问题
|
||
"Origin": "http://127.0.0.1:8080",
|
||
"Referer": "http://127.0.0.1:8080",
|
||
"Accept": "application/json",
|
||
"Cache-Control": "no-cache",
|
||
"Pragma": "no-cache"
|
||
},
|
||
},
|
||
// 代理HLS流请求
|
||
"/hls": {
|
||
target: "http://127.0.0.1:8080",
|
||
changeOrigin: true,
|
||
rewrite: (path) => path, // 不修改路径
|
||
headers: {
|
||
"Origin": "http://127.0.0.1:8080",
|
||
"Referer": "http://127.0.0.1:8080",
|
||
"Cache-Control": "no-cache"
|
||
}
|
||
},
|
||
// 代理历史视频请求
|
||
"/saved": {
|
||
target: "http://127.0.0.1:8080",
|
||
changeOrigin: true,
|
||
rewrite: (path) => path,
|
||
headers: {
|
||
"Origin": "http://127.0.0.1:8080",
|
||
"Referer": "http://127.0.0.1:8080",
|
||
"Cache-Control": "no-cache"
|
||
}
|
||
}
|
||
},
|
||
},
|
||
define: {
|
||
__VUE_OPTIONS_API__: true,
|
||
__VUE_PROD_DEVTOOLS__: false,
|
||
"process.env.VITE_FONT_URL": JSON.stringify(fontConfig.url),
|
||
"process.env.VITE_FONT_ENABLED": JSON.stringify(fontConfig.enabled),
|
||
"process.env.VITE_FONT_PRELOAD": JSON.stringify(fontConfig.preload),
|
||
},
|
||
});
|