hn-hlw-pc/vite.config.js

86 lines
2.5 KiB
JavaScript
Raw Normal View History

2026-07-27 11:32:24 +08:00
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";
import WindiCSS from "vite-plugin-windicss";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import { resolve } from "path";
import fs from "fs-extra";
export default defineConfig(({ command, mode }) => {
const { VITE_TCB_PATH,VITE_API_URL } = loadEnv(mode, process.cwd());
return {
base: `/${VITE_TCB_PATH}/`, //相对路径
server: {
host: "0.0.0.0",
port: "5173",
headers: {
// 防止点击劫持攻击
'X-Frame-Options': 'SAMEORIGIN', // 只允许同源页面嵌入
// 'X-Frame-Options': 'DENY', // 如果要完全禁止被嵌入,使用 DENY
// 额外的安全响应头
'X-Content-Type-Options': 'nosniff',
'X-XSS-Protection': '1; mode=block',
'Content-Security-Policy': "frame-ancestors 'self'", // CSP 的现代替代方案
},
proxy: {
// 将 VITE_PROXY_API_URL 的请求代理到 VITE_API_URL
'/API': {
target: VITE_API_URL,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/API/, '') // 可选:重写路径
}
}
},
plugins: [
vue(),
WindiCSS(),
createSvgIconsPlugin({
// 指定需要缓存的图标文件夹
iconDirs: [path.resolve(process.cwd(), "src/assets/svg-icons")],
// 指定symbolId格式
symbolId: "icon-[dir]-[name]",
}),
],
optimizeDeps: {
exclude: ["lib-generate-test-usersig-es.min"],
},
build: {
outDir: `package/${VITE_TCB_PATH}`,
target: ["chrome52"],
cssTarget: ["chrome52"],
terserOptions: {
compress: {
drop_console: true, // 去除 console.log 等调试信息
},
},
cssCodeSplit: true, // 分割 CSS避免全局 CSS 被打包成一个大文件
minify: "terser", // 使用 terser 进行压缩
brotliSize: true,
},
resolve: {
//文件系统路径的别名, 绝对路径
alias: {
"@": path.resolve(__dirname, "src"),
},
extensions: [".js", ".ts", ".vue", ".json"],
},
};
});
async function copyOldFiles(name) {
const srcDir = resolve(__dirname, name);
const destDir = resolve(__dirname, `oldFile`);
// 创建目标目录
if (!fs.existsSync(srcDir)) {
fs.mkdirSync(srcDir, { recursive: true });
}
if (!fs.existsSync(destDir)) {
fs.mkdirSync(destDir, { recursive: true });
}
try {
// 复制文件
await fs.copy(srcDir, destDir);
} catch (err) {}
}