vite.config.ts 3.6 KB

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