Files
pj_admin_cloud/vite.config.ts
T
dzc d86bc810cc fix:图片访问
fix:权限修改
2026-10-29 14:26:56 +08:00

129 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import vue from "@vitejs/plugin-vue"
import { resolve } from "path"
import { defineConfig, loadEnv, ConfigEnv } from "vite"
import vueSetupExtend from "vite-plugin-vue-setup-extend"
import AutoImport from "unplugin-auto-import/vite"
import topLevelAwait from "vite-plugin-top-level-await"
import { createStyleImportPlugin, VxeTableResolve } from "vite-plugin-style-import"
import viteCompression from "vite-plugin-compression"
// @ts-ignore
import { svgBuilder } from "/@/components/IconSelector/index"
import dns from "node:dns"
dns.setDefaultResultOrder("verbatim")
const pathResolve = (dir: string) => {
return resolve(__dirname, ".", dir)
}
const alias: Record<string, string> = {
"/@": pathResolve("./src/"),
"vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js",
}
const viteConfig = defineConfig((mode: ConfigEnv) => {
const env = loadEnv(mode.mode, process.cwd())
const fileEnv = loadEnv(mode.mode, process.cwd(), '')
if (fileEnv.VITE_FILE_ACCESS_APP_ID !== 'admin' || !/^[a-zA-Z0-9_-]{1,32}$/.test(fileEnv.VITE_FILE_ACCESS_KEY_ID || '')
|| !/^[A-Za-z0-9+/]+={0,2}$/.test(fileEnv.VITE_FILE_ACCESS_KEY || '')
|| Buffer.from(fileEnv.VITE_FILE_ACCESS_KEY || '', 'base64').length < 32) {
throw new Error('请配置文件访问 appId、kid 和至少 32 字节的 Base64 密钥(.env.<mode>.local)')
}
// 判断是否开发环境
const isDev = env.ENV === "development"
return {
plugins: [
vue(), // Vue 插件
svgBuilder("./src/assets/icons/"), // 将 SVG 文件转换成 Vue 组件
vueSetupExtend(), // setup语法糖增强插件
AutoImport({
imports: ["vue", "vue-router", "pinia"], // 自动导入的依赖库数组
dts: "./auto-imports.d.ts", // 自动导入类型定义文件路径
}),
createStyleImportPlugin({
resolves: [VxeTableResolve()], // 配置vxetable 按需加载
}),
topLevelAwait({
promiseExportName: "__tla", // TLA Promise 变量名
promiseImportName: (i) => `__tla_${i}`, // TLA Promise 导入名
}),
viteCompression({
deleteOriginFile: false, // 压缩后删除原来的文件
}),
],
root: process.cwd(), // 项目根目录
resolve: { alias, dedupe: ["echarts"] }, // 图表包装组件与按需注册共用同一份 ECharts
base: mode.command === "serve" ? "./" : env.VITE_PUBLIC_PATH,
optimizeDeps: {
// 统一预构建,避免懒加载图表时核心与组件分批优化后出现多个注册表。
include: [
"element-plus/es/locale/lang/zh-cn", "element-plus/es/locale/lang/en",
"vue-echarts", "echarts", "echarts/core", "echarts/charts", "echarts/components", "echarts/renderers",
],
},
server: {
host: "0.0.0.0", // 服务器地址
port: env.VITE_PORT as unknown as number, // 服务器端口号
open: env.VITE_OPEN === "true", // 是否自动打开浏览器
hmr: true, // 启用热更新
proxy: {
"/api/gen": {
//单体架构下特殊处理代码生成模块代理
target: env.VITE_IS_MICRO === "true" ? env.VITE_ADMIN_PROXY_PATH : env.VITE_GEN_PROXY_PATH,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ""),
},
"/api": {
target: env.VITE_ADMIN_PROXY_PATH, // 目标服务器地址
ws: true, // 是否启用 WebSocket
changeOrigin: true, // 是否修改请求头中的 Origin 字段
rewrite: (path) => path.replace(/^\/api/, ""),
},
"^/ws/info/.*": {
target: env.VITE_ADMIN_PROXY_PATH, // 目标服务器地址
ws: true, // 是否启用 WebSocket
changeOrigin: true,
},
},
},
build: {
outDir: "dist", // 打包输出目录//
chunkSizeWarningLimit: 1500, // 代码分包阈值
// 开发使用 esbuild 更快,生产环境打包使用 terser 可以删除更多注释
minify: isDev ? "esbuild" : "terser",
terserOptions: {
compress: {
drop_console: true, // 删除 console
drop_debugger: true, // 删除 debugger
},
format: {
comments: false, // 删除所有注释
},
},
rollupOptions: {
output: {
entryFileNames: `assets/[name].[hash].js`,
chunkFileNames: `assets/[name].[hash].js`,
assetFileNames: `assets/[name].[hash].[ext]`,
compact: true,
manualChunks: {
vue: ["vue", "vue-router", "pinia"],
echarts: ["echarts"],
},
},
},
},
css: { preprocessorOptions: { css: { charset: false } } },
define: {
__VUE_I18N_LEGACY_API__: JSON.stringify(false),
__VUE_I18N_FULL_INSTALL__: JSON.stringify(false),
__INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false),
__VERSION__: JSON.stringify(process.env.npm_package_version),
__NEXT_NAME__: JSON.stringify(process.env.npm_package_name),
},
}
})
export default viteConfig