Vite 初识及与webpack区别

编程教程 > WEB (270) 2024-11-26 14:39:04

前言

Webpack 和 Vite 都是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟,它提供了许多配置和插件,让开发者定制化构建项目。随着Vite 的出现,Webpack 在启动时间和热更新方面的缺陷就慢慢暴露,Vite 逐渐开始替代 Webpack。

Vite

Webpack 是先打包再运行,而 Vite 开发时并不打包,而是直接采用 ES Module 运行项目,部署的时候再打包,开箱即用。

Vite使用步骤

1. 初始化项目

yarn init -y

2. 安装 Vite

yarn add -D vite

3. Vite的源码目录就是项目根目录,创建index.html文件,以ES Module的方式引入js文件

<script type="module" src="./index.js"></script>

4. 在本地5173端口启动一个开发服务器,进行项目调试

yarn vite

5. 打包代码

yarn vite build

 

快速创建项目

参考 开始 | Vite 官方中文文档 (vitejs.cn)

yarn create vite

如果你选的是原生JS,你就会得到一个这样的完整项目路径:

 

配置文件

首先在根目录下创建vite.config.js文件,⚠️注意这里的抛出语法与 Webpack 不同,Webpack使用 CommonJS 语法,而 Vite 使用的是 ES Module 语法。

//webpack


module.exports = {
   ...
}

//vite


export default = {
   ...
}

这里Vite还提供了一个可选配置项defineConfig

import { defineConfig } from "vite";//需不需要提示
export default defineConfig({
   ...
})

它的作用是在我们写配置的时候会不会有提示。

加了:

 

没加:

 

对比不难发现区别。

 

Vite需要配置loader吗?

试验一下:

h2{
   background-color: pink;
}
import './index.css'
document.body.insertAdjacentHTML('beforeend','<h2>hello vite</h2>');

这里我们在js中引入css样式,然后yarn vite 运行一下

 

结果显而易见,vite不用配置loader就能编译和使用css。

插件

Vite 可以使用插件进行扩展,这得益于 Rollup 优秀的插件接口设计和一部分 Vite 独有的额外选项。详情参见 使用插件 | Vite 官方中文文档 (vitejs.cn)

举个例子?:

要想为传统浏览器提供支持,类似于Babel,需要引入官方插件@vitejs/plugin-legacy和压缩工具terser

yarn add -D @vitejs/plugin-legacy terser
然后配置插件:
import { defineConfig } from "vite";//需不需要提示
import legacy from "@vitejs/plugin-legacy";
export default defineConfig({
   plugins:[
       legacy({
           targets:['ie 11'], //兼容IE 11
       })
   ]
})

我们来个箭头函数检验一下

document.body.onclick=()=>{
   alert('hello vite');
}

yarn vite build一下

 

我们可以看到Vite给我们生产了三个js文件和一个html文件,来分析一下:

index.js

index-legacy.js

这个文件中的箭头函数成功转成了普通函数;

polyfills-legacy.js

这个文件的作用是用于向下兼容旧版浏览器,确保旧版浏览器能够读懂新特性。

index.html

这个文件的意图就很明显了,如果浏览器支持ESModule(即现代浏览器),则一般可以支持新语法,因此就可以直接引入新语法文件;但是如果浏览器不支持ESModule,则可能是旧版本的浏览器,它们可能不支持新特性,这时候就需要引入兼容性代码来填补这些功能的缺失。在这种情况下,一般会引入 polyfills,以及旧版文件,来确保应用在旧版浏览器中的正常运行。

vite不像webpack只生成一个降级之后的文件,而是两个都生成,再根据浏览器的兼容性,动态地确定加载哪个版本的代码。对于现代浏览器来说,直接加载现代版本的代码可以获得更快的加载速度和更好的性能。而对于不支持 ES Module 的旧版浏览器,则加载降级版本的代码以确保兼容性。

以上是对兼容性插件legacy的分析,更多插件可参见 插件 | Vite 官方中文文档 (vitejs.cn)

快捷命令

"scripts": {
 "dev": "vite",
 "build": "vite build",
 "preview": "vite preview"
},

同样放于package.json

 

对比webpack总结

  1. 构建方式: Webpack 通过构建整个项目的依赖图,将所有资源打包成一个或多个 bundle 文件,每次重启都需要打包。Vite 采用了即时编译的方式,在开发模式下通过浏览器原生支持的 ES Module 特性进行加载,不需要打包。
  2. 开发体验: Webpack 需要较多的配置,对复杂的项目来说,需要花费时间和精力来配置各种 loader 和 plugin。Vite 开箱即用,不需要复杂的配置即可快速启动项目,支持各种插件以满足特定需求。
  3. 热更新: Webpack 的热更新通常需要借助 webpack-dev-server 等插件,在一些情况下配置起来比较复杂。Vite 内置了基于浏览器原生模块热更新的开发服务器,无需额外配置即可实现快速的热更新。

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
前言Webpack 和 Vite 都是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟,它提供了许多配置和插件,让开发者定制化构建项目。随着
什么是webpackWebpack是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟,它提供了许多配置和插件,让开发者定制化构建项目。
前言Vue3 + Vite 打包静态资源使用相对路径 默认配置打包后文件预览相对路径绝对路径 Vue3 静态资源相对路径打包配置方法: 在defineConfi
javascript中onclick事件传递对象参数,javascript,javascript传递对象参数
JavaScript/JS读取文本/JSON文件内容let file = files[0];var reader = new FileReader();read
JavaScript/JS数组清空,删除数组内所有数据。Array=[]与Array.length=0的区别
JavaScript H5原生操作元素class,包括获取元素class值,设置class值修改元素class值操作。示例数据 &lt;head&gtl; &lt;meta cha
​JavaScript 数学小数精确计算&lt;!DOCTYPE html&gtl; &lt;html&gtl; &lt;head&gtl; &lt;title&gtl;&lt;/tit...
简介 使用 JavaScript 改变 URL 参数值并且页面不刷新的方法有两种模式:使用 History replaceState使用 History pus
JavaScript正则加上/去掉cdn域名前缀,文本支持&lt;script&gtl;let $domain="https://static-project.example
1.引入依赖js文件&lt;script type="text/javascript" src="/plugin/ckeditor5/ckeditor.js"&gtl;&lt;/s
前言在其他编程语言中,我们可以通过划分模块,来组织庞大复杂的项目,而JS一开始并没有模块的概念,因为一开始JS的脚本就很简单。后来随着JS的发展,前端要开发的项
&lt;body&gtl; &lt;script type="text/javascript"&gtl;   function test(){     let obj={        ...
在初始化完一个vue项目(基于vue-cli 和webpack)之后,我们可以通过 npm run dev来让这个项目跑起来
步骤:1、配置文件webpack.config.js:  {     test:/\.css$/,     loader:'style-loader!css-loader'  ...