Webpack 和 Vite 都是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟,它提供了许多配置和插件,让开发者定制化构建项目。随着Vite 的出现,Webpack 在启动时间和热更新方面的缺陷就慢慢暴露,Vite 逐渐开始替代 Webpack。
Webpack 是先打包再运行,而 Vite 开发时并不打包,而是直接采用 ES Module 运行项目,部署的时候再打包,开箱即用。
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({
...
})
它的作用是在我们写配置的时候会不会有提示。
加了:
没加:
对比不难发现区别。
试验一下:
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
http://blog.xqlee.com/article/2408051705538672.html