2024-08-12 02:18:11 +00:00
|
|
|
|
import vue from '@vitejs/plugin-vue';
|
|
|
|
|
|
|
|
|
|
|
|
import { UserConfig, ConfigEnv, loadEnv, defineConfig } from 'vite';
|
|
|
|
|
|
|
|
|
|
|
|
import AutoImport from 'unplugin-auto-import/vite';
|
|
|
|
|
|
import Components from 'unplugin-vue-components/vite';
|
|
|
|
|
|
|
|
|
|
|
|
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
|
|
|
|
|
|
import path from 'path';
|
|
|
|
|
|
const pathSrc = path.resolve(__dirname, 'src');
|
|
|
|
|
|
|
|
|
|
|
|
// https://vitejs.dev/config/
|
|
|
|
|
|
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
|
|
|
|
|
|
const env = loadEnv(mode, process.cwd());
|
|
|
|
|
|
return {
|
|
|
|
|
|
resolve: {
|
|
|
|
|
|
alias: {
|
|
|
|
|
|
'@': pathSrc,
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
css: {
|
|
|
|
|
|
// CSS 预处理器
|
|
|
|
|
|
preprocessorOptions: {
|
|
|
|
|
|
//define global scss variable
|
|
|
|
|
|
scss: {
|
|
|
|
|
|
javascriptEnabled: true,
|
|
|
|
|
|
additionalData: `@use "@/styles/variables.scss" as *;`,
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
server: {
|
|
|
|
|
|
host: '0.0.0.0',
|
|
|
|
|
|
port: Number(env.VITE_APP_PORT),
|
|
|
|
|
|
open: true, // 运行是否自动打开浏览器
|
|
|
|
|
|
proxy: {
|
|
|
|
|
|
// 反向代理解决跨域
|
|
|
|
|
|
[env.VITE_APP_BASE_API]: {
|
|
|
|
|
|
target: env.VITE_APP_BASE_API_URL, // 接口地址
|
|
|
|
|
|
changeOrigin: true,
|
2025-08-08 10:08:20 +00:00
|
|
|
|
rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), ''), // 替换 /dev-admin 为 target 接口地址
|
2024-08-12 02:18:11 +00:00
|
|
|
|
},
|
2025-03-13 08:53:12 +00:00
|
|
|
|
// 反向代理解决跨域
|
|
|
|
|
|
[env.VITE_APP_BASE_API_PHP]: {
|
|
|
|
|
|
target: env.VITE_APP_BASE_API_PHP_URL, // 接口地址
|
|
|
|
|
|
changeOrigin: true,
|
|
|
|
|
|
rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API_PHP), ''), // 替换 /dev-api 为 target 接口地址
|
|
|
|
|
|
},
|
2025-08-08 10:58:17 +00:00
|
|
|
|
// 反向代理解决跨域
|
|
|
|
|
|
[env.VITE_APP_BASE_API_INDEX_PHP]: {
|
|
|
|
|
|
target: env.VITE_APP_BASE_API_INDEX_PHP_URL, // 接口地址
|
|
|
|
|
|
changeOrigin: true,
|
|
|
|
|
|
rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API_INDEX_PHP), ''), // 替换 /dev-index 为 target 接口地址
|
|
|
|
|
|
},
|
2024-08-12 02:18:11 +00:00
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
plugins: [
|
|
|
|
|
|
vue({
|
|
|
|
|
|
script: {
|
|
|
|
|
|
// 开启defineModel配置
|
|
|
|
|
|
defineModel: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
}),
|
|
|
|
|
|
AutoImport({
|
|
|
|
|
|
// 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
|
|
|
|
|
|
imports: ['vue', '@vueuse/core'],
|
|
|
|
|
|
eslintrc: {
|
|
|
|
|
|
enabled: true,
|
|
|
|
|
|
filepath: './.eslintrc-auto-import.json',
|
|
|
|
|
|
globalsPropValue: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
resolvers: [
|
|
|
|
|
|
// 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)------若是没有自动引入,请耐心等待,反应特别慢,希望以后可以优化
|
|
|
|
|
|
ElementPlusResolver(),
|
|
|
|
|
|
],
|
|
|
|
|
|
vueTemplate: true,
|
|
|
|
|
|
// 配置文件生成位置(false:关闭自动生成)
|
|
|
|
|
|
// dts: false,
|
|
|
|
|
|
dts: path.resolve(pathSrc, 'types', 'auto-imports.d.ts'), // 指定自动导入函数TS类型声明文件路径
|
|
|
|
|
|
}),
|
|
|
|
|
|
Components({
|
|
|
|
|
|
resolvers: [
|
|
|
|
|
|
// 自动导入 Element Plus 组件
|
|
|
|
|
|
ElementPlusResolver(),
|
|
|
|
|
|
],
|
|
|
|
|
|
dirs: ['src/**/components'],
|
|
|
|
|
|
// 配置文件生成位置(false:关闭自动生成)
|
|
|
|
|
|
// dts:false,
|
|
|
|
|
|
dts: path.resolve(pathSrc, 'types', 'components.d.ts'), // 指定自动导入组件TS类型声明文件路径
|
|
|
|
|
|
}),
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
|
|
// 构建配置
|
|
|
|
|
|
build: {
|
2024-08-27 11:06:23 +00:00
|
|
|
|
target: 'esnext',
|
2024-08-12 02:18:11 +00:00
|
|
|
|
// 打包不压缩图片为base64
|
|
|
|
|
|
assetsInlineLimit: 0,
|
|
|
|
|
|
// 混淆器设置
|
|
|
|
|
|
minify: 'terser',
|
|
|
|
|
|
// 不生成source map文件,默认false
|
|
|
|
|
|
sourcemap: false,
|
|
|
|
|
|
// 指定输出路径(相对于项目根目录),默认dist
|
|
|
|
|
|
outDir: 'dist',
|
|
|
|
|
|
// 指定生成静态资源的存放路径,默认assets
|
2024-08-12 11:00:03 +00:00
|
|
|
|
assetsDir: 'assets',
|
2024-08-12 02:18:11 +00:00
|
|
|
|
// chunk大小警告限制,默认500kbs
|
|
|
|
|
|
chunkSizeWarningLimit: 1500,
|
|
|
|
|
|
// 是否禁用css拆分(默认true),设置false时所有CSS将被提取到一个CSS文件中
|
|
|
|
|
|
cssCodeSplit: true,
|
|
|
|
|
|
// 简要配置
|
|
|
|
|
|
terserOptions: {
|
|
|
|
|
|
compress: {
|
|
|
|
|
|
// 移除console
|
2024-08-19 01:51:15 +00:00
|
|
|
|
drop_console: false,
|
2024-08-12 02:18:11 +00:00
|
|
|
|
// 移除debugger
|
|
|
|
|
|
drop_debugger: true,
|
|
|
|
|
|
},
|
|
|
|
|
|
// 保留类名
|
|
|
|
|
|
keep_classnames: true,
|
|
|
|
|
|
format: {
|
|
|
|
|
|
// 移除所有的注释
|
|
|
|
|
|
comments: false,
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
// js、css等文件打包到不同文件夹
|
|
|
|
|
|
rollupOptions: {
|
|
|
|
|
|
output: {
|
|
|
|
|
|
// 自定义 chunk 文件的输出路径和文件名格式
|
2024-09-06 05:40:59 +00:00
|
|
|
|
chunkFileNames: 'static/diy/js/chunk/[name]-[hash].js',
|
2024-08-12 02:18:11 +00:00
|
|
|
|
// 自定义 entry chunk 的输出路径和文件名格式
|
2024-09-06 05:40:59 +00:00
|
|
|
|
entryFileNames: 'static/diy/js/entry/[name]-[hash].js',
|
2024-08-12 02:18:11 +00:00
|
|
|
|
//非js文件夹,按照文件类型分类css,png,jpg
|
2024-09-06 05:40:59 +00:00
|
|
|
|
assetFileNames: 'static/diy/[ext]/[name]-[hash].[ext]',
|
2024-08-12 02:18:11 +00:00
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
};
|
|
|
|
|
|
});
|