vite.config.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* eslint-disable import/no-extraneous-dependencies */
  2. import { defineConfig, loadEnv } from 'vite'
  3. import vue from '@vitejs/plugin-vue'
  4. import eslint from 'vite-plugin-eslint'
  5. import viteCompression from 'vite-plugin-compression'
  6. import { resolve } from 'path'
  7. import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
  8. // https://vitejs.dev/config/
  9. export default ({ mode }) => {
  10. const env = loadEnv(mode, process.cwd())
  11. return defineConfig({
  12. base: './',
  13. resolve: {
  14. alias: {
  15. /*
  16. 路径别名
  17. 若为文件系统路径必须是绝对路径的形式,否则将以别名原样呈现,不会解析为文件系统路径路径
  18. */
  19. '@': resolve(__dirname, './src')
  20. }
  21. },
  22. plugins: [
  23. vue(), viteCompression(),
  24. eslint({ fix: true, include: [ '**/*.ts', '**/*.vue' ] }),
  25. createSvgIconsPlugin({
  26. iconDirs: [ resolve(__dirname, './src/assets/img') ],
  27. symbolId: 'icon-[dir]-[name]'
  28. })
  29. ],
  30. server: {
  31. host: '0.0.0.0',
  32. port: 6888,
  33. open: true,
  34. strictPort: false
  35. },
  36. esbuild: {
  37. drop: mode === 'development' ? [ 'debugger' ] : [ 'debugger', 'console' ] // build 移除打印
  38. },
  39. build: {
  40. rollupOptions: {
  41. input: {
  42. index: resolve(__dirname, 'index.html')
  43. },
  44. output: { // 静态资源分类打包
  45. chunkFileNames: 'js/[hash].js',
  46. entryFileNames: 'js/[hash].js',
  47. assetFileNames: 'assets/[ext]/[hash].[ext]',
  48. // 拆分node_modules包
  49. manualChunks: (id: any) => {
  50. if (id.includes('node_modules')) {
  51. return id.toString().split('node_modules/')[1].split('/')[0].toString()
  52. }
  53. return ''
  54. }
  55. }
  56. }
  57. }
  58. })
  59. }