gushidianzibao-admin/vite.config.ts
2024-12-23 18:01:57 +08:00

145 lines
5.9 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 { defineConfig, loadEnv, ConfigEnv, UserConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// keepAlive 组件name
import vueSetupExtend from "vite-plugin-vue-setup-extend";
// 引入svg需要的插件
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import Unocss from "unocss/vite";
// 数据mock配置
import { viteMockServe } from "vite-plugin-mock";
// gzip压缩
import viteCompression from "vite-plugin-compression";
// 图片压缩
import { ViteImageOptimizer } from 'vite-plugin-image-optimizer';
import path from "path";
// https://vitejs.dev/config/
// 配置mock根据官网这里写法将改成箭头函数
export default defineConfig(({ command, mode }: ConfigEnv): UserConfig => {
const env = loadEnv(mode, process.cwd()); // 获取配置文件别名配置
return {
base: '/dist/', // 设置为您的二级目录名称
plugins: [
vue(),
Unocss(),
vueSetupExtend(),
ViteImageOptimizer(),
createSvgIconsPlugin({
// 配置SVG图片
iconDirs: [path.resolve(process.cwd(), "src/assets/icons")],
symbolId: "icon-[dir]-[name]"
}),
// 配置mock
viteMockServe({
// 解析根目录下的mock文件夹
mockPath: "mock",
// @ts-ignore
localEnabled: command === "serve", // 保证开发阶段可以使用mock接口
supportTs: true, // 打开后,可以读取 ts 文件模块。 请注意,打开后将无法监视.js 文件。
watchFiles: true // 监视文件更改 更改mock的时候不需要重新启动编译
})
],
resolve: {
// 配置路径别名
alias: {
"@": path.resolve("./src"), // 相对路径别名配置,使用 @ 代替 src
"~": path.resolve("./src")
}
},
css: {
// css全局变量使用@/styles/variable.scss文件
preprocessorOptions: {
scss: {
javascriptEnabled: true,
api: 'modern-compiler',
additionalData: '@use "@/styles/variable.scss" as *;'
}
}
},
server: {
hmr: true, // 热更新
open: true, // 自动打开
proxy: {
// 代理跨域
[env.VITE_WEB_BASE_API]: {
// 配置哪个环境下的
target: env.VITE_SERVER,
rewrite: path => path.replace(new RegExp("^" + env.VITE_WEB_BASE_API), ""), // 路径重写例如将路径中包含dev-api字段替换为空。注意只有请求真实后端接口才会有用使用mock接口还是得带koi
// 允许跨域
changeOrigin: true
}
}
},
esbuild: {
// 在生产环境全部去除console 和 debugger
drop: env.VITE_DROP_CONSOLE.length < 5 ? ["console", "debugger"] : []
},
// 预编译增加访问速度针对node_modules
optimizeDeps: {
include: [
"vue",
"vue-router",
"pinia",
"axios",
"@vueuse/core",
"echarts",
"vue-i18n",
"element-plus/es/components/text/style/css",
"element-plus/es/components/collapse-item/style/css",
"element-plus/es/components/collapse/style/css",
"element-plus/es/components/space/style/css",
"element-plus/es/components/container/style/css",
"element-plus/es/components/aside/style/css",
"element-plus/es/components/main/style/css",
"element-plus/es/components/header/style/css",
"element-plus/es/components/button-group/style/css",
"element-plus/es/components/radio-button/style/css",
"element-plus/es/components/checkbox-group/style/css",
"element-plus/es/components/form/style/css",
"element-plus/es/components/form-item/style/css",
"element-plus/es/components/button/style/css",
"element-plus/es/components/input/style/css",
"element-plus/es/components/input-number/style/css",
"element-plus/es/components/switch/style/css",
"element-plus/es/components/upload/style/css",
"element-plus/es/components/menu/style/css",
"element-plus/es/components/col/style/css",
"element-plus/es/components/icon/style/css",
"element-plus/es/components/row/style/css",
"element-plus/es/components/tag/style/css",
"element-plus/es/components/dialog/style/css",
"element-plus/es/components/loading/style/css",
"element-plus/es/components/radio/style/css",
"element-plus/es/components/radio-group/style/css",
"element-plus/es/components/popover/style/css",
"element-plus/es/components/scrollbar/style/css",
"element-plus/es/components/tooltip/style/css",
"element-plus/es/components/dropdown/style/css",
"element-plus/es/components/dropdown-menu/style/css",
"element-plus/es/components/dropdown-item/style/css",
"element-plus/es/components/sub-menu/style/css",
"element-plus/es/components/menu-item/style/css",
"element-plus/es/components/divider/style/css",
"element-plus/es/components/card/style/css",
"element-plus/es/components/link/style/css",
"element-plus/es/components/breadcrumb/style/css",
"element-plus/es/components/breadcrumb-item/style/css",
"element-plus/es/components/table/style/css",
"element-plus/es/components/tree-select/style/css",
"element-plus/es/components/table-column/style/css",
"element-plus/es/components/select/style/css",
"element-plus/es/components/option/style/css",
"element-plus/es/components/pagination/style/css",
"element-plus/es/components/tree/style/css",
"element-plus/es/components/alert/style/css",
"element-plus/es/components/checkbox/style/css",
"element-plus/es/components/date-picker/style/css",
"element-plus/es/components/transfer/style/css",
"element-plus/es/components/tabs/style/css",
"element-plus/es/components/image/style/css",
"element-plus/es/components/tab-pane/style/css"
]
}
};
});