12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- 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 useElectronPlugin from './electron-plugin'
- import server from './server.config'
- const resolvePath = (...args: string[]) => {
- return path.resolve(__dirname, ...args)
- }
- export default defineConfig({
- base: '/',
- plugins: [
- vue(),
- vueJsx(),
- ElementPlus({ useSource: true }),
- createSvgIconsPlugin({
- iconDirs: [resolvePath('src/assets/icons')],
- symbolId: 'icon-[dir]-[name]',
- customDomId: '__svg__icons__dom__',
- }),
- vueSetupExtend(),
- eslint(),
- useElectronPlugin(),
- ],
- 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 *; \n @use "@style/var.scss" as *;`,
- },
- },
- },
- build: {
- outDir: 'dist/web',
- emptyOutDir: true,
- 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,
- })
- const manualChunks = []
- 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]'
- }
- }
|