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

vite打包配置基础

Vite:优化前端打包的利器

Vite(法语意为“快速”)是由 Vue.js 之父尤雨溪开发的一款现代化的前端构建工具,其设计目标是通过提供更快的冷启动速度、更高效的热更新和智能的按需编译打包机制,极大地提升前端开发体验。本文将详细介绍如何利用 Vite 对项目进行优化打包。

Vite 的核心优势与打包原理

  1. 即时编译 - Vite 利用 ES 模块原生支持的浏览器特性,在开发模式下无需预先构建即可实现模块的按需加载和实时编译,大大提高了开发时的启动速度和热更新效率。

  2. 预构建缓存 - 在生产环境打包时,Vite 使用 Rollup 进行代码压缩、优化和树 shaking,同时会充分利用缓存,避免重复构建已无变化的依赖资源。

  3. 按需编译 - Vite 可以只对更改过的文件进行重新编译,而不是全量编译,这在大型项目中尤其能体现出高效性。

Vite 打包优化实践

配置优化

  • 公共路径设置:通过配置 base 参数可以指定静态资源的公共路径,从而使得生成的资源链接更加合理。

// vite.config.jsexport default {base: './', // 根据实际需求调整// ...其他配置项}
  • 压缩优化:Vite 内置了生产环境下的代码压缩功能,确保上线前的代码体积最小化。

  • Tree Shaking:Vite 使用 Rollup 作为默认的打包器,它本身就具有优秀的 Tree Shaking 能力,确保仅打包项目真正使用的代码。

按需加载与动态导入

利用 Vite 的 ES 模块动态导入功能,可以显著降低首屏加载的 JavaScript 大小:


import(/* @vite-ignore */'./moduleA').then((module) => {// 使用 moduleA});

利用插件扩展能力

Vite 支持丰富的插件系统,可以根据项目的具体需求安装对应的优化插件,如提取 CSS 为单独文件、图片压缩、SVG 矢量图转 Symbol 等。

分包策略

对于大型项目,可以结合 Vite 的路由分析插件,实施合理的分包策略,比如基于页面或组件拆分代码库,减小单个 JS 包体积,提高加载速度。

总结起来,Vite 以其独特的设计理念和强大的功能,提供了全新的前端开发和打包体验。通过合理配置和使用 Vite,开发者能够有效地优化项目打包流程,提升应用性能,并享受到前所未有的高效开发过程。

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import { visualizer } from 'rollup-plugin-visualizer'// 获取环境变量
const env = loadEnv(process.env.NODE_ENV, process.cwd())export default defineConfig({// 项目根路径root: './',// 应用的基础路径(例如部署到子目录时设置为'/my-app/')base: env.BASE_URL,// 开发服务器配置server: {host: '0.0.0.0', // 设置服务器监听的主机名或 IP 地址,默认为localhostport: 3000, // 设置服务器端口号open: true, // 自动打开浏览器cors: true, // 启用跨域支持hmr: { overlay: false }, // 关闭热更新错误提示proxy: { // 代理配置'/api': {target: 'http://example.com',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '')}},},// 构建目标build: {// 输出目录outDir: 'dist',// 是否在输出目录保留源码映射文件sourcemap: true,// 是否开启 Tree Shakingtreeshake: true,// 静态资产处理assetsDir: 'assets',// CSS 打包策略(例如:'css' 或 ['css', { modules: true }])cssCodeSplit: true,// 指定 rollup 插件rollupOptions: {input: 'src/main.js',output: {entryFileNames: '[name].[hash].js',chunkFileNames: 'chunks/[name].[hash].js',assetFileNames: 'assets/[ext]/[name].[hash][extname]',},plugins: [// 使用插件示例visualizer({ open: true }),],},// 压缩选项minify: 'terser', // 或者指定自定义压缩插件// 分包配置splitChunks: {minSize: 10000,maxSize: 0,minChunks: 1,maxAsyncRequests: 10,maxInitialRequests: 5,automaticNameDelimiter: '~',name: true,cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,priority: -10,filename: 'vendors.[chunkhash].js',},},},},// 插件配置plugins: [vue(),// 其他插件...],// 编译器配置esbuild: {// ESBuild 相关选项jsxInject: `import * as React from 'react'`, // 对于 JSX 支持},// 预加载资源preload: 'auto',// 预解析资源preFetch: true,// 配置别名resolve: {alias: [{ find: '@', replacement: path.resolve(__dirname, 'src') },// 其他别名...],},// 浏览器兼容性配置optimizeDeps: {include: ['vue-demi'],exclude: ['some-unwanted-package'],},
})

以上示例中包含了 Vite 的核心配置项,但具体配置应根据实际项目需求进行调整。同时,Vite 不断引入新的功能和优化,建议查阅最新的官方文档以获取最新最全的配置选项。

相关文章:

  • B端设计:如何让UI组件库成为助力,而不是阻力。
  • AcWing 796. 子矩阵的和
  • HTML语言
  • webRtc麦克风摄像头检测
  • mysql基础2多表查询
  • php搭建websocket
  • mybatis实践篇(二)
  • OSPF-1类Router LSA学习
  • 2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 2 套
  • Java设计模式之单例模式(多种实现方式)
  • 手撕算法-删除链表的倒数第 N 个结点
  • 抖音IP属地怎么更改
  • pta-洛希极限
  • PostgreSQL关系型数据库介绍与部署
  • [AIGC] Redis基础命令集详细介绍
  • 【node学习】协程
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Consul Config 使用Git做版本控制的实现
  • ES6系统学习----从Apollo Client看解构赋值
  • Mybatis初体验
  • SpingCloudBus整合RabbitMQ
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 分布式事物理论与实践
  • 力扣(LeetCode)56
  • 提醒我喝水chrome插件开发指南
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 怎样选择前端框架
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #pragma data_seg 共享数据区(转)
  • $forceUpdate()函数
  • (70min)字节暑假实习二面(已挂)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)模仿学习-完成后台管理页面查询
  • (转)编辑寄语:因为爱心,所以美丽
  • ... 是什么 ?... 有什么用处?
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net 中viewstate的原理和使用
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @synthesize和@dynamic分别有什么作用?
  • [ Linux ] Linux信号概述 信号的产生
  • [100天算法】-x 的平方根(day 61)
  • [20160807][系统设计的三次迭代]
  • [22]. 括号生成
  • [Android] Upload package to device fails #2720
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件
  • [GYCTF2020]Ez_Express
  • [JDBC-1] JDBC Base Template