123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import path from 'node:path'
- import { defineConfig, splitVendorChunk } from 'vite'
- import vue from '@vitejs/plugin-vue'
- import vueJsx from '@vitejs/plugin-vue-jsx'
- import vueSetupExtend from 'unplugin-vue-setup-extend-plus/vite'
- import ElementPlus from 'unplugin-element-plus/vite'
- import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
- import eslint from 'vite-plugin-eslint'
- import Unocss from 'unocss/vite'
- const resolvePath = (...args: string[]) => {
- return path.resolve(__dirname, ...args)
- }
- export default defineConfig({
- plugins: [
- vue(),
- vueJsx(),
- ElementPlus(),
- createSvgIconsPlugin({
- iconDirs: [resolvePath('src/assets/icons')],
- symbolId: 'icon-[dir]-[name]',
- customDomId: '__svg__icons__dom__',
- }),
- vueSetupExtend(),
- Unocss(),
- eslint(),
- ],
- resolve: {
- extensions: ['.js', '.ts', '.jsx', '.tsx', '.vue', '.json'],
- alias: [
- { find: '@', replacement: resolvePath('src') },
- { find: '@img', replacement: resolvePath('src/assets/images') },
- { find: '@style', replacement: resolvePath('src/assets/styles') },
- ],
- },
- css: {
- preprocessorOptions: {
- scss: {
- additionalData: `@use "@style/element/index.scss" as *;`,
- },
- },
- },
- build: {
- rollupOptions: {
- output: {
- assetFileNames(assetInfo) {
- return `${getExtName(assetInfo.name)}/[name].[hash][extname]`
- },
- chunkFileNames: 'js/[name].[hash].js',
- entryFileNames: 'js/[name].[hash].js',
- manualChunks(id, mode) {
- const m = manualChunks.find((m) => id.includes(`node_modules/${m}`))
- return m ? `third/${m}` : splitVendorChunk()(id, mode)
- },
- },
- },
- },
- server: {
- proxy: {},
- },
- })
- const manualChunks = [
- 'echarts',
- // "lodash-es",
- // "dayjs",
- // "vue-echarts",
- // "element-plus",
- // "zrender",
- ]
- const IMAGE_EXT = /\.(png|jpg|jpeg|gif|webp)$/
- const SVG_EXT = /\.(svg)$/
- const FONT_EXT = /\.(ttf|otf|woff|woff2)$/
- const getExtName = (name: string) => {
- if (IMAGE_EXT.test(name)) {
- return 'image'
- } else if (SVG_EXT.test(name)) {
- return 'icons'
- } else if (FONT_EXT.test(name)) {
- return 'fonts'
- } else {
- return '[ext]'
- }
- }
|