You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.6 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. import { resolve } from 'node:path'
  2. import vue from '@vitejs/plugin-vue'
  3. import AutoImport from 'unplugin-auto-import/vite'
  4. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  5. import { defineConfig } from 'vite'
  6. import viteCompression from 'vite-plugin-compression'
  7. import eslintPlugin from 'vite-plugin-eslint'
  8. import packageJson from './package.json'
  9. const Timestamp = new Date().getTime()
  10. export default defineConfig({
  11. define: {
  12. __APP_VERSION__: JSON.stringify(packageJson.version),
  13. },
  14. base: './',
  15. envPrefix: 'FT_',
  16. esbuild: {
  17. drop: process.env.NODE_ENV === 'production' ? ['console'] : [],
  18. },
  19. build: {
  20. sourcemap: false,
  21. outDir: `dist-v${packageJson.version}`,
  22. rollupOptions: {
  23. output: {
  24. manualChunks(id) {
  25. if (id.includes('node_modules')) {
  26. return id.toString().split('node_modules/')[1].split('/')[0].toString()
  27. }
  28. },
  29. chunkFileNames: (chunkInfo) => {
  30. const facadeModuleId = chunkInfo.facadeModuleId
  31. ? chunkInfo.facadeModuleId.split('/')
  32. : []
  33. const fileName = facadeModuleId.slice(-2)[0] || '[name]'
  34. return `js/${fileName}/[name].[hash].${Timestamp}.js`
  35. },
  36. },
  37. },
  38. },
  39. plugins: [
  40. vue(),
  41. AutoImport({
  42. imports: ['vue', 'vue-router', {
  43. vue: ['withModifiers'],
  44. }, {
  45. from: 'element-plus/es',
  46. imports: ['TabPaneName'],
  47. type: true,
  48. }],
  49. dts: true,
  50. eslintrc: {
  51. enabled: true,
  52. },
  53. resolvers: [ElementPlusResolver({ importStyle: 'sass' })],
  54. }),
  55. eslintPlugin({
  56. cache: false, // 禁用缓存,以确保每次修改后都能及时生效
  57. }),
  58. viteCompression({
  59. verbose: true,
  60. disable: false,
  61. threshold: 10240,
  62. algorithm: 'gzip',
  63. ext: '.gz',
  64. }),
  65. ],
  66. resolve: {
  67. alias: {
  68. '@': resolve(__dirname, './src'),
  69. 'apis': resolve(__dirname, 'src/apis'),
  70. 'assets': resolve(__dirname, 'src/assets'),
  71. 'components': resolve(__dirname, 'src/components'),
  72. 'hooks': resolve(__dirname, 'src/hooks'),
  73. 'libs': resolve(__dirname, 'src/libs'),
  74. 'stores': resolve(__dirname, 'src/stores'),
  75. 'views': resolve(__dirname, 'src/views'),
  76. },
  77. },
  78. // 本地化配置
  79. server: {
  80. // open: true,
  81. hmr: true,
  82. port: 3000,
  83. host: '0.0.0.0',
  84. proxy: {
  85. '/api': {
  86. target: 'http://192.168.1.199:8080',
  87. // target: 'http://192.168.1.200:8080',
  88. // secure: false,
  89. changeOrigin: true, // 是否跨域
  90. rewrite: path => path.replace(/^\/api/, 'api'),
  91. },
  92. },
  93. },
  94. })