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 不断引入新的功能和优化,建议查阅最新的官方文档以获取最新最全的配置选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧物联-能源分析平台

物联能源分析平台是为了满足企业对能源管理和节能减排的需求而开发的一套在线平台。随着能源问题日益凸显,企业对能源的使用和管理面临着越来越大的挑战。因此,开发一个能够帮助企业实时监测、分析和优化能源消耗的平台变得尤为重要。 随着工业化和城市…

Java-JVM指令

JVM指令 1. 栈和局部变量操作 1.1 将常量压入栈的指令aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型…

C++面向对象整理(7)之运算符重载、operator关键字

C面向对象整理(7)之运算符重载、operator关键字 注:整理一些突然学到的C知识,随时mark一下 例如:忘记的关键字用法,新关键字,新数据结构 C 的 类的运算符重载 C面向对象整理(7&#…

力扣3. 无重复字符的最长子串

Problem: 3. 无重复字符的最长子串 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.川建一个set集合存储最长的无重复的字符; 2.创建双指针p、q,每次当q指针指向的字符不在set集合中时将其添加到set集合中让q指针后移,并且更新…

【算法每日一练]

目录 今日知识点: 辗转相减法化下三角求行列式 组合数动态规划打表 约数个数等于质因数的次方1的乘积 求一个模数 将n个不同的球放入r个不同的盒子:f[i][j]f[i-1][j-1]f[i-1][j]*j 将n个不同的球放入r个相同的盒子:a[i][j]a[i-j][j]a[…

高架学习笔记之需求工程

目录 一、什么是软件需求 二、需求工程 2.1. 需求获取 2.2. 需求分析 2.3. 形成需求规格 2.4. 需求确认 2.5. 需求管理 2.5.1. 变更控制 2.5.2. 版本控制 2.5.3. 需求跟踪 2.5.4. 需求状态跟踪 一、什么是软件需求 软件需求目前没有统一的定义,一般是指用…

Vue3:直接对一个响应式对象数据进行结构复制会丢失响应式效果

一、问题描述 我们在进行路由页面传参的时候,使用query方式传递数据 这个时候,接收数据的组件,会从useRoute的query属性里面获取数据 如果,这里使用结构赋值语法,那么,获取到的数据,会失去响应…

手写一个LRU

import java.util.LinkedHashMap; import java.util.Map;public class LRUCache<K, V> extends LinkedHashMap<K, V> {private final int cacheSize;public LRUCache(int cacheSize) {// 设置访问顺序为访问顺序&#xff0c;即最近访问的元素将被放置在队列尾部sup…

从零开始学HCIA之网络基础知识01

1、20世纪70年代末&#xff0c;为了打破不同厂商设备之间无法相互通信的界限&#xff0c;ISO&#xff08;International Organization for Standardization&#xff0c;国际标准化组织&#xff09;开发了OSI参考模型&#xff08;Open System Interconnection Reference Model&a…

树的遍历方式DFS和BFS

DFS(depth first search) 深度优先遍历 从图中一个未访问的顶点V开始&#xff0c;沿着一条路一直走到底&#xff0c;然后从这条路尽头的节点回退到上一个节点&#xff0c;再从另一条路走到底…不断递归重复这个过程&#xff0c;直到所有的顶点都遍历完成。前序遍历&#xff0c…

前端框架前置课(1)---AJAX阶段

1. AJAX入门 1.1 AJAX概念和axios使用 1.1.1 什么是AJAX? 1.1.2 怎么用AJAX? 引入axios.js 获取省份列表数据 1.2 认识URL 1.3 URL查询参数 1.4 常用请求方和数据提交 1.5 HTTP协议-报文 1.5.1 HTTP响应状态码 1.5.1.1 状态码&#xff1a;1XX&#xff08;信息&#xff09…

字母在字符串中的百分比

字母在字符串中的百分比 链接:https://leetcode.cn/problems/percentage-of-letter-in-string/description/ 给你⼀个字符串 s 和⼀个字符 letter &#xff0c;返回在 s 中等于 letter 字符所占的 百分比 &#xff0c;向下取整到最接近的百分比。 输⼊&#xff1a;s “foob…

sox命令用法

play input.wav 播放音频 sox input.wav -n stat 查看音频文件信息 soxi input.wav 查看音频文件信息input sox input.wav -n stat -v 不失真最大调整量 sox -v 0.8 input.wav output.wav 调整音量0.8,&#xff08;大于1为扩大&#xff0c;小于1为缩小&#xff09; sox *.wav *…

用最小堆实现通用的高效定时器组件

用最小堆实现通用的高效定时器组件 文章目录 用最小堆实现通用的高效定时器组件开篇解决方案类图源码实现测试总结 开篇 在程序开发过程中&#xff0c;定时器会经常被使用到。而在Linux应用开发中&#xff0c;系统定时器资源有限&#xff0c;进程可创建的定时器数量会受到系统限…

力扣爆刷第103天之CodeTop100五连刷1-5

力扣爆刷第103天之CodeTop100五连刷1-5 文章目录 力扣爆刷第103天之CodeTop100五连刷1-5一、3. 无重复字符的最长子串二、206. 反转链表三、146. LRU 缓存四、215. 数组中的第K个最大元素五、25. K 个一组翻转链表 一、3. 无重复字符的最长子串 题目链接&#xff1a;https://l…

计算机软件安全

一、软件安全涉及的范围 1.1软件本身的安全保密 软件的本质与特征&#xff1a; 可移植性 寄生性 再生性 可激发性 攻击性 破坏性 …… 知识产权与软件盗版 软件商品交易形式不透明&#xff0c;方式多样&#xff0c;传统商标标识方法不适用&#xff1b; 盗版方法简捷…

SFML udp通信实例

包含的lib库文件&#xff0c;免得一个一个复制名称&#xff1a; sfml-window-d.lib sfml-system-d.lib sfml-audio-d.lib sfml-graphics-d.lib sfml-main-d.lib sfml-network-d.lib vorbis.lib vorbisenc.lib vorbisfile.lib void runUdpClient(unsigned short port) { /…

【Nginx】配置Nginx以支持主域名和二级域名

生命就像是一场告别 从起点对一切说再见 你拥有的仅仅是伤痕 在回望来路的时候 那天我们相遇在街上 彼此寒暄并报以微笑 我们相互拥抱挥手道别 转过身后已泪流满面 &#x1f3b5; 蔡健雅《当我想你的时候》 Nginx是一款高性能的Web服务器和反向代理服务器…

springboot/ssm本科生交流培养管理平台Java高校课程选课系统web

springboot/ssm本科生交流培养管理平台Java高校课程选课系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1…

我的风采——android studio

目录 实现“我的风采”页面要求理论代码生成apk文件 实现“我的风采”页面 要求 要求利用’java框架的边框布局实现“找的风采 ”页而&#xff0c;其中中间为你的生活照&#xff0c;左右和下面为按钮&#xff0c;上面为标签 理论 Java GUI编程是Java程序设计的重要组成部分…