vite.config.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { resolve } from 'path';
  2. import type { UserConfig, Plugin as VitePlugin } from 'vite';
  3. import type { Plugin } from 'rollup';
  4. import visualizer from 'rollup-plugin-visualizer';
  5. import { modifyVars } from './build/config/glob/lessModifyVars';
  6. import { setupBasicEnv } from './build/config/vite/env';
  7. import { createProxy } from './build/config/vite/proxy';
  8. import { createMockServer } from 'vite-plugin-mock';
  9. import PurgeIcons from 'vite-plugin-purge-icons';
  10. import { isDevFn, isReportMode, isProdFn, loadEnv } from './build/utils';
  11. setupBasicEnv();
  12. const { VITE_USE_MOCK } = loadEnv();
  13. function pathResolve(dir: string) {
  14. return resolve(__dirname, '.', dir);
  15. }
  16. const rollupPlugins: Plugin[] = [];
  17. const vitePlugins: VitePlugin[] = [];
  18. (() => {
  19. if (isReportMode() && isProdFn()) {
  20. // report
  21. rollupPlugins.push(
  22. visualizer({ filename: './node_modules/.cache/stats.html', open: true }) as Plugin
  23. );
  24. }
  25. if (isDevFn() && VITE_USE_MOCK === 'true') {
  26. // open mock
  27. vitePlugins.push(
  28. createMockServer({
  29. ignore: /^\_/,
  30. mockPath: 'mock',
  31. })
  32. );
  33. }
  34. })();
  35. const viteConfig: UserConfig = {
  36. silent: false,
  37. /**
  38. * 服务地址
  39. * @default 'localhost'
  40. */
  41. hostname: 'localhost',
  42. /**
  43. * 端口号
  44. * @default '3000'
  45. */
  46. port: 3100,
  47. /**
  48. * 运行自动打开浏览器·
  49. * @default 'false'
  50. */
  51. open: false,
  52. /**
  53. * 压缩代码
  54. * boolean | 'terser' | 'esbuild'
  55. * @default 'terser'
  56. */
  57. minify: isDevFn() ? false : 'terser',
  58. /**
  59. * 在生产中投放时提供基本公共路径
  60. * @default '/'
  61. */
  62. base: isDevFn() ? '/' : './',
  63. /**
  64. * 打包输入路径
  65. * @default 'dist'
  66. */
  67. outDir: 'dist',
  68. /**
  69. * @default 'false'
  70. */
  71. sourcemap: false,
  72. /**
  73. * 资源输出路径
  74. * @default '_assets'
  75. */
  76. assetsDir: '_assets',
  77. /**
  78. * 静态资源小于该大小将会内联,默认4096kb
  79. * @default '4096'
  80. */
  81. assetsInlineLimit: 4096,
  82. /**
  83. * esbuild转换目标。
  84. * @default 'es2019'
  85. */
  86. esbuildTarget: 'es2019',
  87. // 别名
  88. alias: {
  89. '/@/': pathResolve('src'),
  90. },
  91. // define: {
  92. // __ENV__: 'value',
  93. // },
  94. // css预处理
  95. cssPreprocessOptions: {
  96. less: {
  97. modifyVars: modifyVars,
  98. javascriptEnabled: true,
  99. },
  100. },
  101. // 配置Dep优化行为
  102. // 会使用 rollup 对 包重新编译,将编译成符合 esm 模块规范的新的包放入 node_modules 下的 .
  103. optimizeDeps: {
  104. include: ['ant-design-vue/es/locale/zh_CN', '@ant-design/icons-vue', 'moment/locale/zh-cn'],
  105. },
  106. // 本地跨域代理
  107. proxy: createProxy([['/api', 'http://localhost:3000']]),
  108. plugins: [PurgeIcons(), ...vitePlugins],
  109. rollupOutputOptions: {},
  110. rollupInputOptions: {
  111. plugins: rollupPlugins,
  112. },
  113. };
  114. export default viteConfig;