vite.config.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { defineConfig, loadEnv } from 'vite';
  2. import { resolve } from 'path';
  3. import vue from '@vitejs/plugin-vue';
  4. import Markdown from 'vite-plugin-md';
  5. import viteCompression from 'vite-plugin-compression';
  6. import DefineOptions from 'unplugin-vue-define-options/vite'; // Setup 中 Component Name 定义语法糖插件
  7. import AutoImport from 'unplugin-auto-import/vite';
  8. import Components from 'unplugin-vue-components/vite';
  9. import Icons from 'unplugin-icons/vite';
  10. import IconsResolver from 'unplugin-icons/resolver';
  11. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
  12. import { dirResolver, DirResolverHelper } from 'vite-auto-import-resolvers';
  13. export default defineConfig(({ mode }) => ({
  14. // 部署到子路径时,需配置 base,例如 /aps/
  15. base: loadEnv(mode, process.cwd()).VITE_APP_BASE || '/',
  16. plugins: [
  17. vue({ include: [/\.vue$/, /\.md$/] }),
  18. Markdown(),
  19. DirResolverHelper(),
  20. AutoImport({
  21. include: [/\.[tj]sx?$/, /\.vue$/, /\.md$/],
  22. imports: [
  23. 'vue',
  24. 'vue-router',
  25. 'pinia',
  26. '@vueuse/core',
  27. {
  28. axios: [
  29. // 默认导入
  30. ['default', 'axios'] // import { default as axios } from 'axios',
  31. ]
  32. }
  33. ],
  34. resolvers: [
  35. IconsResolver({
  36. prefix: 'Icon' // 自动导入图标组件
  37. }),
  38. ElementPlusResolver(),
  39. dirResolver({
  40. target: 'src/hooks',
  41. prefix: 'use'
  42. }),
  43. dirResolver({
  44. target: 'src/store/modules',
  45. suffix: 'Store' // 强制后缀为 Store
  46. })
  47. ],
  48. dts: 'types/auto-imports.d.ts',
  49. eslintrc: {
  50. enabled: true // 每次启动服务会生成一次,生成后记得设置 false 关闭
  51. }
  52. }),
  53. Components({
  54. dirs: ['src/components'],
  55. resolvers: [
  56. IconsResolver({
  57. enabledCollections: ['ep'] // 自动注册图标组件
  58. }),
  59. ElementPlusResolver()
  60. ],
  61. dts: 'types/components.d.ts' // 每次启动服务会生成一次,生成后记得设置 false 关闭
  62. }),
  63. Icons({
  64. autoInstall: true
  65. }),
  66. viteCompression({
  67. threshold: 10240
  68. }),
  69. DefineOptions()
  70. ],
  71. server: {
  72. port: 8080,
  73. host: true,
  74. proxy: {
  75. [`${loadEnv(mode, process.cwd()).VITE_APP_BASE_API}`]: {
  76. // rewrite: path => path.replace(/^\/api/, ''),
  77. target: loadEnv(mode, process.cwd()).VITE_APP_PROXY_URL,
  78. changeOrigin: true
  79. }
  80. }
  81. },
  82. resolve: {
  83. alias: {
  84. '@': resolve(__dirname, 'src'),
  85. docs: resolve(__dirname, 'docs')
  86. },
  87. extensions: ['.vue', '.ts', '.js', '.css', '.scss', '.jsx', '.json', '.md']
  88. },
  89. css: {
  90. preprocessorOptions: {
  91. scss: {
  92. additionalData: `@import "@/assets/style/global.scss";` // 全局的scss文件
  93. }
  94. }
  95. },
  96. build: {
  97. emptyOutDir: true,
  98. sourcemap: true,
  99. rollupOptions: {
  100. input: {
  101. index: resolve(__dirname, 'index.html')
  102. },
  103. output: {
  104. chunkFileNames: 'assets/js/[name]-[hash].js',
  105. entryFileNames: 'assets/js/[name]-[hash].js',
  106. assetFileNames: 'assets/[ext]/[name]-[hash].[ext]'
  107. }
  108. }
  109. }
  110. }));