vite.config.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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_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. server: {
  46. hmr: true,
  47. host: true,
  48. port: VITE_PORT,
  49. proxy: createProxy(VITE_PROXY),
  50. },
  51. optimizeDeps: {
  52. include: [],
  53. exclude: ['vue-demi'],
  54. },
  55. build: {
  56. target: 'es2015',
  57. cssTarget: 'chrome80',
  58. outDir: OUTPUT_DIR,
  59. reportCompressedSize: false,
  60. chunkSizeWarningLimit: 2000,
  61. },
  62. };
  63. };