Vite和Vue CLI的优劣


Posted in Vue.js onJanuary 30, 2021

Vue 生态系统中有一个名为 Vite 的新构建工具,它的开发服务器比 Vue CLI 快 10-100 倍。

这是否意味着 Vue CLI 已经过时了?在本文中,我将比较这两种构建工具,并说明它们的优缺点,以便你可以决定哪一种适合你的下一个项目。

Vue CLI 概述

大多数 Vue 开发人员都知道,Vue CLI 是使用标准构建工具和最佳实践配置快速建立基于 Vue 的项目的不可或缺的工具。

其主要功能包括:

  • 工程脚手架
  • 带热模块重载的开发服务器
  • 插件系统
  • 用户界面

在本讨论中需要注意的是,Vue CLI 是构建在 Webpack 之上的,因此开发服务器和构建功能和性能都将是 Webpack 的超集。

Vite 概述

与 Vue CLI 类似,Vite 也是一个提供基本项目脚手架和开发服务器的构建工具。

然而,Vite 并不是基于 Webpack 的,它有自己的开发服务器,利用浏览器中的原生 ES 模块。这种架构使得 Vite 比 Webpack 的开发服务器快了好几个数量级。Vite 采用 Rollup 进行构建,速度也更快。

Vite 目前还处于测试阶段,看来 Vite 项目的目的并不是像 Vue CLI 那样的一体化工具,而是专注于提供一个快速的开发服务器和基本的构建工具。

Vite 怎么这么快?

Vite 开发服务器至少会比 Webpack 快 10 倍左右。对于一个基本的项目来说,与 2.5 秒相比,开发构建/重新构建的时间相差 250ms。

在一个较大的项目中,这种差异会变得更加明显。Webpack 开发服务器在构建/重新构建时可能会慢到 25-30 秒,有时甚至更慢。与此同时,Vite 开发服务器可能会以恒定的 250ms 的速度为同一个项目提供服务。

这显然是开发经验和游戏规则改变的差异,Vite 是如何做到这一点的?

Webpack 开发服务器架构

Webpack 的工作方式是,它通过解析应用程序中的每一个 import 和 require ,将整个应用程序构建成一个基于 JavaScript 的捆绑包,并在运行时转换文件(例如 Sass、TypeScript、SFC)。

这都是在服务器端完成的,依赖的数量和改变后构建/重新构建的时间之间有一个大致的线性关系。

Vite 开发服务器架构

Vite 不捆绑应用服务器端。相反,它依赖于浏览器对 JavaScript 模块的原生支持(也就是 ES 模块,是一个比较新的功能)。

浏览器将在需要时通过 HTTP 请求任何 JS 模块,并在运行时进行处理。Vite 开发服务器将按需转换任何文件(如 Sass、TypeScript、SFC)。

这种架构避免了服务器端对整个应用的捆绑,并利用浏览器高效的模块处理,提供了一个明显更快的开发服务器。

提示:当你对应用程序进行 code-split 和 tree-shake 动时,Vite 的速度会更快,因为它只加载它需要的模块,即使是在开发阶段。这与 Webpack 不同,在 Webpack 中,代码拆分只对生产包有利。

Vite 的缺点

你可能已经明白了,Vite 的主要特点是它的开发服务器快得离谱。

如果没有这个功能,可能就不会再讨论了,因为与 Vue CLI 相比,它确实没有其他的功能,而且确实有一些缺点。

由于 Vite 使用了 JavaScript 模块,所以最好让依赖关系也使用 JavaScript 模块。虽然大多数现代 JS 包都提供了这一点,但一些老的包可能只提供 CommonJS 模块。

Vite 可以将 CommonJS 转换为 JavaSript 模块,但在一些边缘情况下它可能无法做到。当然,它还需要支持 JavaScript 模块的浏览器。

与 Webpack/Vue CLI 不同,Vite 无法创建针对旧版浏览器、web components 等的捆绑包。

而且,与 Vue CLI 不同,开发服务器和构建工具是不同的系统,导致在生产与开发中可能出现不一致的行为。

Vue CLI vs Vite 总结

Vue CLI 优点 Vue CLI 缺点
经历过战斗考验,可靠 开发服务器速度与依赖数量成反比
与 Vue 2 兼容
可以捆绑任何类型的依赖关系
插件生态系统
可以针对不同的目标进行构建

Vite 优点 Vite 缺点
开发服务器比 Webpack 快 10-100 倍 只能针对现代浏览器(ES2015+)
将 code-splitting 作为优先事项 与 CommonJS 模块不完全兼容
处于测试阶段,仅支持 Vue 3
最小的脚手架不包括 Vuex、路由器等
不同的开发服务器与构建工具

Vite 的未来

虽然上面的比较主要集中在 Vite 和 Vue CLI 的现状上,但仍有几点需要考虑:

  • 仅当浏览器中的 JavaScript 模块支持得到改善时,Vite 才会有所改善。
  • 随着 JS 生态系统的追赶,更多的软件包将支持 JavaScript 模块,减少 Vite 无法处理的边缘情况。
  • Vite 仍处于测试阶段?功能可能会有变化。
  • 有可能 Vue CLI 最终会结合 Vite,这样你就不用再使用其中一个了。

值得注意的是,Vite 并不是唯一一个利用浏览器中 JavaScript 模块的开发服务器项目。还有更著名的Snowpack,甚至可能会挤掉 Vite 的发展。时间会证明这一点

以上就是Vite和Vue CLI的优劣的详细内容,更多关于Vite和Vue CLI的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
springboot+vue实现文件上传下载
Nov 17 Vue.js
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
vue监听键盘事件的相关总结
Jan 29 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
关于Vue Router的10条高级技巧总结
May 06 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 #Vue.js
vue监听键盘事件的相关总结
Jan 29 #Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 #Vue.js
vue 项目@change多个参数传值多个事件的操作
Jan 29 #Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 #Vue.js
聊聊vue 中的v-on参数问题
Jan 29 #Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 #Vue.js
You might like
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
js中cookie的使用详细分析
2008/05/28 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
vue-resourc发起异步请求的方法
2020/02/11 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
python list的index()和find()的实现
2020/11/16 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
初中政治教学反思
2014/01/17 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
房产转让协议书
2014/04/11 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
物业接待员岗位职责
2015/04/15 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
Nginx安装配置详解
2022/06/25 Servers