vite.config.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import fs from 'node:fs'
  2. import path from 'node:path'
  3. import process from 'node:process'
  4. import dayjs from 'dayjs'
  5. import { defineConfig, loadEnv } from 'vite'
  6. import pkg from './package.json'
  7. import createVitePlugins from './vite/plugins'
  8. // https://vitejs.dev/config/
  9. export default defineConfig(({ mode, command }) => {
  10. const env = loadEnv(mode, process.cwd())
  11. // 全局 scss 资源
  12. const scssResources: string[] = []
  13. fs.readdirSync('src/assets/styles/resources').forEach((dirname) => {
  14. if (fs.statSync(`src/assets/styles/resources/${dirname}`).isFile()) {
  15. scssResources.push(`@use "/src/assets/styles/resources/${dirname}" as *;`)
  16. }
  17. })
  18. return {
  19. // 静态资源基础路径
  20. base: env.VITE_BASE_PATH || '/',
  21. // 开发服务器选项 https://cn.vitejs.dev/config/server-options
  22. server: {
  23. open: true,
  24. host: '0.0.0.0', // 监听所有接口
  25. port: 9000,
  26. proxy: {
  27. '/proxy': {
  28. target: env.VITE_APP_API_BASEURL,
  29. changeOrigin: command === 'serve' && env.VITE_OPEN_PROXY === 'true',
  30. rewrite: path => path.replace(/\/proxy/, ''),
  31. },
  32. },
  33. },
  34. // 构建选项 https://cn.vitejs.dev/config/build-options
  35. build: {
  36. outDir: mode === 'production' ? 'dist' : `dist-${mode}`,
  37. sourcemap: env.VITE_BUILD_SOURCEMAP === 'true',
  38. rollupOptions: {
  39. output: {
  40. manualChunks: {
  41. vue: ['vue', 'vue-router', 'pinia'],
  42. 'element-plus': ['element-plus', '@element-plus/icons-vue'],
  43. echarts: ['echarts'],
  44. qrcode: ['qrcode'],
  45. 'vue-office': ['@vue-office/docx'],
  46. html2canvas: ['html2canvas'],
  47. jszip: ['jszip'],
  48. },
  49. },
  50. },
  51. },
  52. define: {
  53. __SYSTEM_INFO__: JSON.stringify({
  54. pkg: {
  55. version: pkg.version,
  56. dependencies: pkg.dependencies,
  57. devDependencies: pkg.devDependencies,
  58. },
  59. lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  60. }),
  61. },
  62. plugins: createVitePlugins(mode, command === 'build'),
  63. resolve: {
  64. alias: {
  65. '@': path.resolve(__dirname, 'src'),
  66. '#': path.resolve(__dirname, 'src/types'),
  67. },
  68. },
  69. optimizeDeps: {
  70. include: ['@vue-office/docx', 'vue-demi'],
  71. },
  72. css: {
  73. preprocessorOptions: {
  74. scss: {
  75. api: 'modern-compiler',
  76. additionalData: scssResources.join(''),
  77. },
  78. },
  79. },
  80. }
  81. })