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

Vite 下一代的前端工具链,前端开发与构建工具

一、Vite 简介

官方中文网站:Vite | 下一代的前端工具链

官方定义:

Vite,下一代的前端工具链,为开发提供极速响应。

Vue3.4版本,Vue新版本使用Vite构建、开发、调试、编译。

Vite的优势

极速的服务启动
使用原生 ESM 文件,无需打包!
轻量快速的热重载
无论应用程序大小如何,都始终极快的模块热替换(HMR)
丰富的功能
对 TypeScript、JSX、CSS 等支持开箱即用。
优化的构建
可选 “多页应用” 或 “库” 模式的预配置 Rollup 构建
通用的插件
在开发和构建之间共享 Rollup-superset 插件接口。
完全类型化的API
灵活的 API 和完整的 TypeScript 类型。

二、前端程序员定义

Vite是一种新型的前端构建工具,它能显著改善前端开发体验。


Vite由两个主要部分组成:

dev server:利用浏览器的ESM能力来提供源文件,具有丰富的内置功能并具有高效的HMR
生产构建:生产环境利用Rollup来构建代码,提供指令用来优化构建过程

Vite作为一个基于浏览器原生ESM的构建工具,它省略了开发环境的打包过程,利用浏览器去解析imports,在服务端按需编译返回。同时,在开发环境拥有速度快到惊人的模块热更新,且热更新的速度不会随着模块增多而变慢。因此,使用Vite进行开发,至少会比Webpack快10倍左右。
 

三、Vite的主要特性
Instant Server Start —— 即时服务启动
Lightning Fast HMR —— 闪电般快速的热更新
Rich Features —— 丰富的功能
Optimized Build —— 经过优化的构建
Universal Plugin Interface —— 通用的Plugin接口
Fully Typed APIs —— 类型齐全的API

四、为什么要使用Vite

开发环境⚡️速度的提升

我们详细对比了开发环境中的Vite和Webpack,发现主要有如下不同:

WebpackVite
先打包生成bundle,再启动开发服务器先启动开发服务器,利用新一代浏览器的ESM能力,无需打包,直接请求所需模块并实时编译
HMR时需要把改动模块及相关依赖全部编译HMR时只需让浏览器重新请求该模块,同时利用浏览器的缓存(源码模块协商缓存,依赖模块强缓存)来优化请求
内存高效利用-

因此,针对开发环境中的启动慢问题,Vite开发环境冷启动无需打包,无需分析模块之间的依赖,同时也无需在启动开发服务器前进行编译,启动时还会使用esbuild来进行预构建。而Webpack 启动后会做一堆事情,经历一条很长的编译打包链条,从入口开始需要逐步经历语法解析、依赖收集、代码转译、打包合并、代码优化,最终将高版本的、离散的源码编译打包成低版本、高兼容性的产物代码,这可满满都是 CPU、IO 操作啊,在 Node 运行时下性能必然是有问题。

更多:

Vue3富文本组件UEditor ,vue-ueditor-wrap@3.x

基于Vue的移动端UI框架整理

Vue2报错opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ]

相关文章:

  • 百面嵌入式专栏(面试题)C语言面试题22道
  • C++ 内存管理(newdelete)
  • c#: 表达式树的简化
  • 移动光猫gs3101超级密码及改桥接模式教程
  • 【知识整理】管理即服务,识人、识己
  • 从领域外到领域内:LLM在Text-to-SQL任务中的演进之路
  • Postgresql数据库存储过程中的事务处理
  • 进程状态 | 僵尸进程 | 孤儿进程 | 前台后台进程 | 守护进程
  • python flask 魔术方法
  • Spring + Tomcat项目中nacos配置中文乱码问题解决
  • Redis——缓存设计与优化
  • 【Matplotlib】figure方法之图形的保存
  • 构建信息学奥赛学习计划:走向编程竞技的巅峰
  • 上市公司人工智能转型指数及55个工具变量汇总数据集(2024.2月更新)
  • 层序遍历,LeetCode 993. 二叉树的堂兄弟节点
  • [译] React v16.8: 含有Hooks的版本
  • 【css3】浏览器内核及其兼容性
  • 【Leetcode】104. 二叉树的最大深度
  • Android开源项目规范总结
  • Django 博客开发教程 16 - 统计文章阅读量
  • Iterator 和 for...of 循环
  • js面向对象
  • js数组之filter
  • PhantomJS 安装
  • 关于extract.autodesk.io的一些说明
  • 前端面试题总结
  • 软件开发学习的5大技巧,你知道吗?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 鱼骨图 - 如何绘制?
  • 再谈express与koa的对比
  • 阿里云服务器如何修改远程端口?
  • ​Python 3 新特性:类型注解
  • ​马来语翻译中文去哪比较好?
  • # Java NIO(一)FileChannel
  • #define 用法
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (12)目标检测_SSD基于pytorch搭建代码
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)Eureka服务搭建,服务注册,服务发现
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)ORM
  • (转)程序员疫苗:代码注入
  • **CI中自动类加载的用法总结
  • .form文件_一篇文章学会文件上传
  • .net Application的目录
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .Net 代码性能 - (1)
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET命名规范和开发约定
  • .NET上SQLite的连接
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Mapper作用