import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import Icons from 'unplugin-icons/vite' import IconsResolver from 'unplugin-icons/resolver' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import Inspect from 'vite-plugin-inspect' import path from 'path' import px2rem from 'postcss-px2rem' // 配置基本大小 const postcss = px2rem({ // 基准大小 baseSize,需要和rem.js中相同 // remUnit: 14 代表 1rem = 14px; 所以当你一个14px值时,它会自动转成 (14px/14)rem remUnit: 14 }) // eslint-disable-next-line no-undef const pathSrc = path.resolve(__dirname, 'src') // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { // eslint-disable-next-line no-undef const env = loadEnv(mode, process.cwd()) return { // 静态路径 base: env.VITE_BASE_URL, // 打包名称 build: { outDir: env.VITE_OUT_DIR }, server: { // 允许IP访问 host: '0.0.0.0', // 应用端口 (默认:3000) port: Number(env.VITE_APP_PORT), // 运行是否自动打开浏览器 open: true, proxy: { '/files': { target: 'https://broadcast.waityou24.cn', // https://broadcast.waityou24.cn changeOrigin: true }, /** * env.VITE_APP_BASE_API: /dev-api */ [env.VITE_APP_BASE_API]: { changeOrigin: true, target: 'http://127.0.0.1:19000' } } }, resolve: { alias: { '@': pathSrc } }, css: { postcss: { plugins: [postcss] }, preprocessorOptions: { // 定义全局 SCSS 变量 scss: { additionalData: `@import "@/styles/variables.scss";` } } }, plugins: [ vue(), // // 自动导入参考: https://github.com/sxzz/element-plus-best-practices/blob/main/vite.config.ts AutoImport({ // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等 imports: ['vue', '@vueuse/core', 'pinia', 'vue-router', 'vue-i18n'], // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式) resolvers: [ElementPlusResolver(), IconsResolver({})], eslintrc: { enabled: false, filepath: './.eslintrc-auto-import.json', globalsPropValue: true }, vueTemplate: true // 配置文件生成位置(false:关闭自动生成) //dts: false, // dts: path.resolve(pathSrc, 'auto-imports.d.ts') }), Components({ resolvers: [ // 自动导入 Element Plus 组件 ElementPlusResolver(), // 自动注册图标组件 IconsResolver({ enabledCollections: ['ep'] }) ], // 指定自定义组件位置(默认:src/components) dirs: ['src/components', 'src/**/components'] // 配置文件位置 (false:关闭自动生成) //dts: false, // dts: path.resolve(pathSrc, 'components.d.ts') }), Icons({ autoInstall: true }), createSvgIconsPlugin({ // 指定需要缓存的图标文件夹 iconDirs: [path.resolve(pathSrc, 'assets/icons')], // 指定symbolId格式 symbolId: 'icon-[dir]-[name]' }), Inspect() ], // 预加载项目必需的组件 optimizeDeps: { include: [ 'vue', 'vue-router', 'pinia', 'axios', '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/radio-button/style/css', 'element-plus/es/components/checkbox-group/style/css', 'element-plus/es/components/checkbox/style/css', 'element-plus/es/components/tabs/style/css', 'element-plus/es/components/tab-pane/style/css', 'element-plus/es/components/rate/style/css', 'element-plus/es/components/date-picker/style/css', 'element-plus/es/components/notification/style/css', 'element-plus/es/components/image/style/css', 'element-plus/es/components/statistic/style/css', 'element-plus/es/components/watermark/style/css', 'element-plus/es/components/config-provider/style/css', 'vue-i18n', 'element-plus/es/components/text/style/css', '@vueuse/core' // 'sortablejs', // 'path-to-regexp', // 'echarts', // '@wangeditor/editor', // '@wangeditor/editor-for-vue', // 'path-browserify' ] } } })