vite.config.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import fs from 'node:fs'
  2. import path from 'node:path'
  3. import { defineConfig, loadEnv } from 'vite'
  4. import dayjs from 'dayjs'
  5. import pkg from './package.json'
  6. import createVitePlugins from './vite/plugins'
  7. // https://vitejs.dev/config/
  8. export default async ({ mode, command }) => {
  9. const env = loadEnv(mode, process.cwd())
  10. // 全局 scss 资源
  11. const scssResources = []
  12. fs.readdirSync('src/assets/styles/resources').forEach((dirname) => {
  13. if (fs.statSync(`src/assets/styles/resources/${dirname}`).isFile()) {
  14. scssResources.push(`@use "src/assets/styles/resources/${dirname}" as *;`)
  15. }
  16. })
  17. // css 精灵图相关
  18. fs.readdirSync('src/assets/sprites').forEach((dirname) => {
  19. if (fs.statSync(`src/assets/sprites/${dirname}`).isDirectory()) {
  20. // css 精灵图生成的 scss 文件也需要放入全局 scss 资源
  21. scssResources.push(`@use "src/assets/sprites/_${dirname}.scss" as *;`)
  22. }
  23. })
  24. return defineConfig({
  25. base: './',
  26. // 开发服务器选项 https://cn.vitejs.dev/config/#server-options
  27. server: {
  28. open: true,
  29. port: 9000,
  30. proxy: {
  31. '/proxy': {
  32. target: env.VITE_APP_API_BASEURL,
  33. changeOrigin: command === 'serve' && env.VITE_OPEN_PROXY === 'true',
  34. rewrite: path => path.replace(/\/proxy/, ''),
  35. },
  36. },
  37. },
  38. // 构建选项 https://cn.vitejs.dev/config/#server-fsserve-root
  39. build: {
  40. outDir: mode === 'production' ? 'dist' : `dist-${mode}`,
  41. sourcemap: env.VITE_BUILD_SOURCEMAP === 'true',
  42. },
  43. define: {
  44. __SYSTEM_INFO__: JSON.stringify({
  45. pkg: {
  46. dependencies: pkg.dependencies,
  47. devDependencies: pkg.devDependencies,
  48. },
  49. lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  50. }),
  51. },
  52. plugins: createVitePlugins(env, command === 'build'),
  53. resolve: {
  54. alias: {
  55. '@': path.resolve(__dirname, 'src'),
  56. '#': path.resolve(__dirname, 'src/types'),
  57. },
  58. },
  59. css: {
  60. preprocessorOptions: {
  61. scss: {
  62. additionalData: scssResources.join(''),
  63. },
  64. },
  65. },
  66. })
  67. }