vite.config.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 { format } from 'date-fns';
  10. const { dependencies, devDependencies, name, version } = pkg;
  11. const __APP_INFO__ = {
  12. pkg: { dependencies, devDependencies, name, version },
  13. lastBuildTime: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
  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_DROP_CONSOLE, VITE_PORT, VITE_GLOB_PROD_MOCK, VITE_PROXY } =
  23. viteEnv;
  24. const prodMock = VITE_GLOB_PROD_MOCK;
  25. const isBuild = command === 'build';
  26. return {
  27. base: VITE_PUBLIC_PATH,
  28. esbuild: {},
  29. resolve: {
  30. alias: [
  31. {
  32. find: /\/#\//,
  33. replacement: pathResolve('types') + '/',
  34. },
  35. {
  36. find: '@',
  37. replacement: pathResolve('src') + '/',
  38. },
  39. ],
  40. dedupe: ['vue'],
  41. },
  42. plugins: createVitePlugins(viteEnv, isBuild, prodMock),
  43. define: {
  44. __APP_INFO__: JSON.stringify(__APP_INFO__),
  45. },
  46. css: {
  47. preprocessorOptions: {
  48. less: {
  49. modifyVars: {},
  50. javascriptEnabled: true,
  51. additionalData: `@import "src/styles/var.less";`,
  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: [],
  69. exclude: ['vue-demi'],
  70. },
  71. build: {
  72. target: 'es2015',
  73. cssTarget: 'chrome80',
  74. outDir: OUTPUT_DIR,
  75. // terserOptions: {
  76. // compress: {
  77. // keep_infinity: true,
  78. // drop_console: VITE_DROP_CONSOLE,
  79. // },
  80. // },
  81. brotliSize: false,
  82. chunkSizeWarningLimit: 2000,
  83. },
  84. };
  85. };