vite.config.ts 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import react from '@vitejs/plugin-react';
  2. import { defineConfig, loadEnv } from 'vite';
  3. import removeConsole from 'vite-plugin-remove-console';
  4. import { viteBuildInfo } from './build/buildInfo';
  5. import { configCompressPlugin } from './build/compress';
  6. import svgConvert from './build/svgConvert';
  7. import { root, alias, wrapperEnv } from './build/utils';
  8. // https://vitejs.dev/config/
  9. export default defineConfig(({ mode }) => {
  10. const env = wrapperEnv(loadEnv(mode, root));
  11. const isProd = mode === 'production';
  12. return {
  13. base: env.VITE_BUILD_PUBLIC_PATH,
  14. plugins: [
  15. react(),
  16. isProd &&
  17. removeConsole({
  18. includes: ['log', 'warn'],
  19. external: ['error'],
  20. }),
  21. svgConvert(),
  22. viteBuildInfo(),
  23. configCompressPlugin(env.VITE_BUILD_COMPRESSION!),
  24. ].filter(Boolean),
  25. resolve: { alias },
  26. css: {
  27. preprocessorOptions: {
  28. less: {
  29. javascriptEnabled: true,
  30. },
  31. scss: {
  32. additionalData: `@use "@/styles/variables" as *;`,
  33. },
  34. },
  35. },
  36. server: {
  37. port: env.VITE_DEV_PORT,
  38. host: '0.0.0.0',
  39. open: true,
  40. proxy: {
  41. '/dev/api/v1': {
  42. target: env.VITE_DEV_PROXY_TARGET_API_BASE_URL,
  43. changeOrigin: true,
  44. rewrite: (path) => path.replace(/^\/dev\/api\/v1/, ''),
  45. secure: false,
  46. configure: (proxy) => {
  47. proxy.on('error', (err) => {
  48. console.log('proxy error', err);
  49. });
  50. proxy.on('proxyReq', (_, req) => {
  51. console.log(
  52. 'Sending Request to the Target:',
  53. req.method,
  54. req.url,
  55. env.VITE_DEV_PROXY_TARGET_API_BASE_URL
  56. );
  57. });
  58. proxy.on('proxyRes', (proxyRes, req) => {
  59. console.log(
  60. 'Received Response from the Target:',
  61. proxyRes.statusCode,
  62. req.url
  63. );
  64. });
  65. },
  66. },
  67. },
  68. warmup: {
  69. clientFiles: ['./index.html', './src/{pages,components}/*'],
  70. },
  71. },
  72. build: {
  73. outDir: 'dist',
  74. sourcemap: !isProd,
  75. target: ['es2015', 'chrome87', 'safari13', 'firefox78', 'edge88'],
  76. cssTarget: ['chrome87', 'safari13', 'firefox78', 'edge88'],
  77. rollupOptions: {
  78. output: {
  79. manualChunks: {
  80. 'react-vendor': ['react', 'react-dom', 'react-router-dom'],
  81. 'antd-vendor': ['antd'],
  82. 'utils-vendor': ['lodash-es', 'ramda'],
  83. },
  84. },
  85. },
  86. chunkSizeWarningLimit: 1500,
  87. },
  88. };
  89. });