vite.config.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { defineConfig, loadEnv } from 'vite';
  2. import vue from '@vitejs/plugin-vue';
  3. import AutoImport from 'unplugin-auto-import/vite'
  4. import Components from 'unplugin-vue-components/vite'
  5. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  6. import { resolve } from 'path'
  7. import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
  8. import fs from 'fs'
  9. import viteImagemin from 'vite-plugin-imagemin'
  10. // 使用unplugin-vue-components 按需导入的依赖项更新导致页面无限次重载问题
  11. const optimizeDepsElementPlusIncludes = ['element-plus/es'];
  12. fs.readdirSync('node_modules/element-plus/es/components').forEach((dirname) => {
  13. fs.access(
  14. `node_modules/element-plus/es/components/${dirname}/style/css.mjs`,
  15. (err) => {
  16. if (!err) {
  17. optimizeDepsElementPlusIncludes.push(
  18. `element-plus/es/components/${dirname}/style/css`
  19. );
  20. }
  21. }
  22. )
  23. })
  24. export default defineConfig(({ command, mode }) => {
  25. // 获取.env文件里定义的环境变量
  26. const env = loadEnv(mode, process.cwd());
  27. console.log(mode, command, env); // 变量在命令行里打印出来
  28. return {
  29. base: env.VITE_BASE_PREFIX,
  30. // root: resolve(__dirname, 'src'),
  31. // publicDir: resolve(__dirname, './public'),
  32. plugins: [
  33. vue(),
  34. viteImagemin({
  35. // 只处理图片文件
  36. include: ['**/*.{png,jpg,jpeg,gif,svg,webp}'],
  37. exclude: ['**/*.js', '**/*.css', '**/*.html']
  38. }),
  39. AutoImport({
  40. resolvers: [ElementPlusResolver()],
  41. }),
  42. Components({
  43. resolvers: [ElementPlusResolver({
  44. importStyle: 'sass'
  45. })],
  46. }),
  47. createSvgIconsPlugin({
  48. // 指定需要缓存的图标文件夹
  49. iconDirs: [resolve(process.cwd(), 'src/assets/icon/svg')],
  50. // 指定symbolId格式
  51. symbolId: 'icon-[name]',
  52. })
  53. ],
  54. resolve: {
  55. alias: {
  56. '@': resolve(__dirname, 'src')
  57. },
  58. },
  59. server: {
  60. proxy: {
  61. '/api': {
  62. target: env.VITE_BASE_URL,
  63. changeOrigin: true,
  64. rewrite: path => path.replace(/^\/api/, ''),
  65. }
  66. },
  67. },
  68. define: {
  69. 'process.env': {}
  70. },
  71. css: {
  72. preprocessorOptions: {
  73. }
  74. },
  75. // 构建配置项
  76. build: {
  77. chunkSizeWarningLimit: 1500,
  78. rollupOptions: {
  79. input: {
  80. index: resolve(__dirname, 'index.html'),
  81. },
  82. output: {
  83. manualChunks(id) {
  84. if (id.includes('node_modules')) {
  85. return id
  86. .toString()
  87. .split('node_modules/')[1]
  88. .split('/')[0]
  89. .toString();
  90. }
  91. },
  92. },
  93. },
  94. },
  95. optimizeDeps: {
  96. include: optimizeDepsElementPlusIncludes
  97. }
  98. }
  99. })