vite.config.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import type { ConfigEnv, UserConfig } 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_PROXY } = viteEnv;
  23. const isBuild = command === 'build';
  24. return {
  25. base: VITE_PUBLIC_PATH,
  26. esbuild: {},
  27. resolve: {
  28. alias: [
  29. {
  30. find: /\/#\//,
  31. replacement: pathResolve('types') + '/',
  32. },
  33. {
  34. find: '@',
  35. replacement: pathResolve('src') + '/',
  36. },
  37. ],
  38. dedupe: ['vue'],
  39. },
  40. plugins: createVitePlugins(viteEnv, isBuild),
  41. define: {
  42. __APP_INFO__: JSON.stringify(__APP_INFO__),
  43. },
  44. server: {
  45. hmr: true,
  46. host: true,
  47. port: VITE_PORT,
  48. proxy: createProxy(VITE_PROXY),
  49. },
  50. optimizeDeps: {
  51. include: [],
  52. exclude: ['vue-demi'],
  53. },
  54. build: {
  55. target: 'es2018',
  56. cssTarget: 'chrome80',
  57. outDir: OUTPUT_DIR,
  58. reportCompressedSize: false,
  59. chunkSizeWarningLimit: 2000,
  60. },
  61. };
  62. };