vite.config.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import type { UserConfig, ConfigEnv } from 'vite';
  2. import { loadEnv } from 'vite';
  3. import { resolve } from 'path';
  4. import { wrapperEnv } from './build/utils';
  5. import { createVitePlugins } from './build/vite/plugin';
  6. import { OUTPUT_DIR } from './build/constant';
  7. import { createProxy } from './build/vite/proxy';
  8. import pkg from './package.json';
  9. import { formatToDateTime } from './src/utils/dateUtil';
  10. const { dependencies, devDependencies, name, version } = pkg;
  11. const __APP_INFO__ = {
  12. pkg: { dependencies, devDependencies, name, version },
  13. lastBuildTime: formatToDateTime(new Date()),
  14. };
  15. function pathResolve(dir: string) {
  16. return resolve(process.cwd(), '.', dir);
  17. }
  18. export default ({ command, mode }: ConfigEnv): UserConfig => {
  19. const root = process.cwd();
  20. const env = loadEnv(mode, root);
  21. const viteEnv = wrapperEnv(env);
  22. const { VITE_PUBLIC_PATH, VITE_PORT, VITE_GLOB_PROD_MOCK, VITE_PROXY } = viteEnv;
  23. const prodMock = VITE_GLOB_PROD_MOCK;
  24. const isBuild = command === 'build';
  25. return {
  26. base: VITE_PUBLIC_PATH,
  27. esbuild: {},
  28. resolve: {
  29. alias: [
  30. {
  31. find: /\/#\//,
  32. replacement: pathResolve('types') + '/',
  33. },
  34. {
  35. find: '@',
  36. replacement: pathResolve('src') + '/',
  37. },
  38. ],
  39. dedupe: ['vue'],
  40. },
  41. plugins: createVitePlugins(viteEnv, isBuild, prodMock),
  42. define: {
  43. __APP_INFO__: JSON.stringify(__APP_INFO__),
  44. },
  45. css: {
  46. devSourcemap: true,
  47. preprocessorOptions: {
  48. scss: {
  49. modifyVars: {},
  50. javascriptEnabled: true,
  51. additionalData: `@import "src/styles/var.scss";`,
  52. },
  53. },
  54. },
  55. server: {
  56. host: true,
  57. port: VITE_PORT,
  58. proxy: createProxy(VITE_PROXY),
  59. // proxy: {
  60. // '/api': {
  61. // target: '',
  62. // changeOrigin: true,
  63. // rewrite: (path) => path.replace(/^\/api/, '/api/v1')
  64. // }
  65. // }
  66. },
  67. optimizeDeps: {
  68. include: ['dayjs', '@vicons/ionicons5', '@vicons/antd', '@element-plus/icons-vue'],
  69. exclude: [],
  70. },
  71. build: {
  72. target: 'es2015',
  73. outDir: OUTPUT_DIR,
  74. // minify: 'terser',
  75. /**
  76. * 当 minify 为 minify 或 terser 打开注释
  77. */
  78. // terserOptions: {
  79. // compress: {
  80. // keep_infinity: true,
  81. // drop_console: VITE_DROP_CONSOLE,
  82. // },
  83. // },
  84. reportCompressedSize: false,
  85. chunkSizeWarningLimit: 2000,
  86. },
  87. };
  88. };