vite.config.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { defineConfig, loadEnv } from 'vite';
  2. import createVitePlugins from './vite/plugins';
  3. import path from 'path';
  4. export default defineConfig(({ mode, command }) => {
  5. const env = loadEnv(mode, process.cwd());
  6. return {
  7. plugins: createVitePlugins(env, command === 'build'),
  8. base: env.VITE_APP_BASE,
  9. server: {
  10. // 允许IP访问
  11. host: '0.0.0.0',
  12. // 应用端口 (默认:3000)
  13. port: Number(env.VITE_APP_PORT),
  14. // 运行是否自动打开浏览器
  15. open: true,
  16. proxy: {
  17. /** 代理前缀为 /dev-api 的请求 */
  18. [env.VITE_APP_BASE_API]: {
  19. changeOrigin: true,
  20. // 接口地址
  21. target: env.VITE_APP_API_URL,
  22. rewrite: path => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), 'api'),
  23. },
  24. },
  25. },
  26. resolve: {
  27. alias: {
  28. // 设置路径
  29. '~': path.resolve(__dirname, './'),
  30. // 设置别名
  31. '@': path.resolve(__dirname, './src'),
  32. },
  33. },
  34. // 构建配置
  35. build: {
  36. chunkSizeWarningLimit: 2000, // 消除打包大小超过500kb警告
  37. minify: 'terser', // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效
  38. terserOptions: {
  39. compress: {
  40. keep_infinity: true, // 防止 Infinity 被压缩成 1/0,这可能会导致 Chrome 上的性能问题
  41. drop_console: true, // 生产环境去除 console
  42. drop_debugger: true, // 生产环境去除 debugger
  43. },
  44. format: {
  45. comments: false, // 删除注释
  46. },
  47. },
  48. rollupOptions: {
  49. output: {
  50. // manualChunks: {
  51. // "vue-i18n": ["vue-i18n"],
  52. // },
  53. // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
  54. entryFileNames: 'js/[name].[hash].js',
  55. // 用于命名代码拆分时创建的共享块的输出命名
  56. chunkFileNames: 'js/[name].[hash].js',
  57. // 用于输出静态资源的命名,[ext]表示文件扩展名
  58. assetFileNames: (assetInfo: any) => {
  59. const info = assetInfo.name.split('.');
  60. let extType = info[info.length - 1];
  61. // console.log('文件信息', assetInfo.name)
  62. if (/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i.test(assetInfo.name)) {
  63. extType = 'media';
  64. } else if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(assetInfo.name)) {
  65. extType = 'img';
  66. } else if (/\.(woff2?|eot|ttf|otf)(\?.*)?$/i.test(assetInfo.name)) {
  67. extType = 'fonts';
  68. }
  69. return `${extType}/[name].[hash].[ext]`;
  70. },
  71. },
  72. },
  73. },
  74. };
  75. });