vite.config.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { defineConfig } from 'vite';
  2. import vue from '@vitejs/plugin-vue';
  3. import { resolve } from 'path';
  4. import Compression from 'vite-plugin-compression';
  5. import Components from 'unplugin-vue-components/vite';
  6. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
  7. import { EleAdminResolver } from 'ele-admin-plus/es/utils/resolvers';
  8. import AutoImport from 'unplugin-auto-import/vite';
  9. export default defineConfig(({ command }) => {
  10. const isBuild = command === 'build';
  11. const alias = {
  12. '@/': resolve('src') + '/'
  13. };
  14. const plugins = [
  15. vue(),
  16. AutoImport({
  17. imports: ['vue', 'vue-router', 'pinia'], //自动引入vue的ref、toRefs、onmounted等,无需在页面中再次引入
  18. resolvers: [ElementPlusResolver()]
  19. })
  20. ];
  21. if (isBuild) {
  22. // 组件按需引入
  23. plugins.push(
  24. Components({
  25. dts: false,
  26. resolvers: [
  27. ElementPlusResolver({
  28. importStyle: 'sass'
  29. }),
  30. EleAdminResolver({
  31. importStyle: 'sass'
  32. })
  33. ]
  34. })
  35. );
  36. // gzip压缩
  37. plugins.push(
  38. Compression({
  39. disable: !isBuild,
  40. threshold: 10240,
  41. algorithm: 'gzip',
  42. ext: '.gz'
  43. })
  44. );
  45. } else {
  46. // 开发环境全局安装
  47. alias['./as-needed'] = './global-import';
  48. }
  49. return {
  50. resolve: { alias },
  51. plugins,
  52. css: {
  53. preprocessorOptions: {
  54. scss: {
  55. additionalData: `@use "@/styles/variables.scss" as *;`
  56. }
  57. }
  58. },
  59. optimizeDeps: {
  60. include: [
  61. 'echarts/core',
  62. 'echarts/charts',
  63. 'echarts/renderers',
  64. 'echarts/components',
  65. 'vue-echarts',
  66. 'echarts-wordcloud',
  67. 'sortablejs',
  68. 'vuedraggable'
  69. ]
  70. },
  71. build: {
  72. target: 'chrome63',
  73. chunkSizeWarningLimit: 2000
  74. }
  75. };
  76. });