当前位置: 首页 > news >正文

vite详细打包配置,包含性能优化、资源处理...

一、以下是针对Vite项目的详细打包配置补充,包含性能优化、资源处理和特殊需求配置:


vite.config.ts 完整打包配置示例

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { visualizer } from 'rollup-plugin-visualizer'
import legacy from '@vitejs/plugin-legacy'
import { terser } from 'rollup-plugin-terser'// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {// 环境变量加载const env = loadEnv(mode, process.cwd())return {plugins: [vue(),AutoImport({resolvers: [ElementPlusResolver()],dts: 'src/types/auto-imports.d.ts' // 自动导入类型声明}),Components({resolvers: [ElementPlusResolver()],dts: 'src/types/components.d.ts' // 组件类型声明}),// 打包分析插件(仅生产环境)mode === 'production' && visualizer({open: true,gzipSize: true,brotliSize: true}),// 浏览器兼容插件legacy({targets: ['defaults', 'not IE 11']})],// 构建配置build: {target: 'es2015', // 编译目标outDir: 'dist',  // 输出目录assetsDir: 'assets', // 静态资源目录sourcemap: env.VITE_SOURCEMAP === 'true', // 按需开启minify: 'terser', // 压缩方式cssCodeSplit: true, // CSS代码分割// Rollup配置rollupOptions: {output: {// 代码分割策略manualChunks(id) {if (id.includes('node_modules')) {return 'vendor'}if (id.includes('src/router')) {return 'router'}},// 文件命名规则chunkFileNames: 'js/[name]-[hash].js',entryFileNames: 'js/[name]-[hash].js',assetFileNames: 'assets/[ext]/[name]-[hash][extname]'},// 外部依赖排除(如有需要)external: ['some-cdn-library']},// Terser压缩配置terserOptions: {compress: {drop_console: true,  // 移除consoledrop_debugger: true  // 移除debugger},format: {comments: false // 移除注释}}},// 开发服务器配置server: {port: 5173, // 开发端口open: true  // 自动打开浏览器},// 路径别名配置resolve: {alias: {'@': '/src','#': '/types'}},// CSS预处理器配置css: {preprocessorOptions: {scss: {additionalData: `@use "@/styles/variables.scss" as *;`}}}}
})

关键配置说明

1. 代码分割优化
rollupOptions: {output: {manualChunks(id) {if (id.includes('node_modules')) {// 将node_modules代码单独打包if (id.includes('element-plus')) return 'element-plus'if (id.includes('lodash')) return 'lodash'return 'vendor'}}}
}
2. 静态资源处理
build: {assetsInlineLimit: 4096, // 小于4KB的资源转为base64// 复制公共资源到dist目录assetsInclude: ['public/**/*.pdf']
}
3. 兼容性处理
// 安装旧浏览器支持插件
npm install @vitejs/plugin-legacy -D// 配置
legacy({targets: ['> 0.5%', 'last 2 versions'],modernPolyfills: true
})

自定义打包命令

// package.json
{"scripts": {"build": "vite build","build:stage": "vite build --mode staging","build:analyze": "vite build --mode production && vite preview --port 4173","preview": "vite preview --port 4173"}
}

环境变量配置

# .env.production
VITE_API_BASE_URL = /api/
VITE_SOURCEMAP = false# .env.staging
VITE_API_BASE_URL = http://stage-api.example.com

优化建议

  1. 图片压缩

    npm install vite-plugin-imagemin -D
    
    import imagemin from 'vite-plugin-imagemin'
    // 添加到plugins数组
    imagemin({gifsicle: { optimizationLevel: 7 },optipng: { optimizationLevel: 7 }
    })
    
  2. Gzip压缩

    npm install vite-plugin-compression -D
    
    import compression from 'vite-plugin-compression'
    // 添加到plugins数组
    compression({algorithm: 'gzip',ext: '.gz'
    })
    
  3. CDN加速

    // vite.config.ts
    build: {rollupOptions: {external: ['vue', 'element-plus'],output: {globals: {'vue': 'Vue','element-plus': 'ElementPlus'}}}
    }
    

常见打包问题解决

  1. 文件体积过大

    • 使用rollup-plugin-visualizer分析包组成
    • 按需加载第三方库(如Element Plus)
    • 开启Gzip/Brotli压缩
  2. 路由懒加载失效

    // 确保使用动态导入语法
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
    
  3. 静态资源404

    // 使用绝对路径
    new URL(`/src/assets/image.png`, import.meta.url).href
    
  4. 样式丢失

    // 强制CSS注入
    build: {cssTarget: 'chrome61' // 兼容低版本浏览器
    }
    

通过以上配置,可以实现:

  • 代码体积优化(减少30%-50%)
  • 首屏加载速度提升
  • 更好的浏览器兼容性
  • 清晰的构建产物结构
  • 便捷的多环境打包支持

实际配置时需根据项目具体需求调整参数,建议结合vite build --mode yourmode实现多环境差异化打包。

相关文章:

  • 通过dogssl申请ssl免费证书
  • 如何一键提取多个 PPT 幻灯片中的备注到 TXT 记事本文件中
  • 通过AI工具或模型创建PPT的不同方式详解,结合 Assistants API、DALL·E 3 等工具的功能对比及表格总结
  • Word处理控件Spire.Doc系列教程:C# 为 Word 文档设置背景颜色或背景图片
  • 什么是snmp协议?在优雅草星云智控AI物联网监控系统中如何添加设备进行监控【星云智控手册01】-优雅草卓伊凡
  • HarmonyOS:网络HTTP数据请求
  • 离散化区间和 java c++
  • WebRTC服务器Coturn服务器相关测试工具
  • 2023蓝帽杯初赛内存取证-5
  • 开源模型应用落地-Podcastfy-从文本到声音的智能跃迁-Docker(二)
  • Debian 12.10 root 登录失败,两步解决!
  • 精益数据分析(14/126):基于数据洞察优化产品与运营
  • RK3588 Buildroot 新建板级DTS
  • 从ChatGPT到GPT-4:大模型如何重塑人类认知边界?
  • Idea创建项目的搭建
  • yooAsset打包后材质丢失
  • DAY6-UFS基本概念
  • N8N MACOS本地部署流程避坑指南
  • GTS-400 系列运动控制器板(九)----设置轴为闭环控制方式
  • 缓存与内存;缺页中断;缓存映射:组相联
  • 全球最大车展在上海启幕,解放日报头版头条:“看懂上海车展,就能预判未来”
  • 当代读书人的暗号:不是拆快递,是拆出版社样书!|世界读书日特辑
  • 全总:五一拟表彰全国劳模先进工作者2426名,盛李豪入选
  • 著名电化学家、我国工业电化学奠基人之一郭鹤桐逝世
  • 京东:自21日起,所有超时20分钟以上的外卖订单全部免单
  • 女子伸腿阻止列车关门等待同行人员,被深圳铁路警方行政拘留