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