vite.config.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. base: './',
  20. // 开发服务器选项 https://cn.vitejs.dev/config/server-options
  21. server: {
  22. open: true,
  23. host: true,
  24. port: 9000,
  25. proxy: {
  26. '/proxy': {
  27. target: env.VITE_APP_API_BASEURL,
  28. changeOrigin: command === 'serve' && env.VITE_OPEN_PROXY === 'true',
  29. rewrite: path => path.replace(/\/proxy/, ''),
  30. },
  31. },
  32. },
  33. // 构建选项 https://cn.vitejs.dev/config/build-options
  34. build: {
  35. outDir: mode === 'production' ? 'dist' : `dist-${mode}`,
  36. sourcemap: env.VITE_BUILD_SOURCEMAP === 'true',
  37. },
  38. define: {
  39. __SYSTEM_INFO__: JSON.stringify({
  40. pkg: {
  41. dependencies: pkg.dependencies,
  42. devDependencies: pkg.devDependencies,
  43. },
  44. lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  45. }),
  46. },
  47. plugins: createVitePlugins(mode, command === 'build'),
  48. resolve: {
  49. alias: {
  50. '@': path.resolve(__dirname, 'src'),
  51. '#': path.resolve(__dirname, 'src/types'),
  52. },
  53. },
  54. css: {
  55. preprocessorOptions: {
  56. scss: {
  57. additionalData: scssResources.join(''),
  58. },
  59. },
  60. },
  61. }
  62. })