模块支持
vite | webpack |
---|---|
Vite 主要支持 ES Modules | Webpack 支持 ES Modules、CommonJS 和 AMD Modules 等多种模块规范 |
开发环境
webpack: 需要先将代码打包成bundle包,才能在浏览器的中动态加载,且每次更新后需要刷新浏览器才能观察到效果。
vite: vite的项目运行依赖于浏览器原生的ES模块支持,因此vite项目的构建过程被延迟到开发环境运行的时候,实现了快速的冷启动和热模块替换(HMR),可以自动刷新。
生产环境构建
webpack:会将代码打包成多个bundle文件,以此来进行代码的优化,压缩,拆分等操作。
vite:生产环境的构建时,模块的导入依然使用ES的方法,不会将所有的代码打包为一个bundle。
刷新
webpack: 的HMR是全局属性,代码发生变化会替换整个模块,通过 HMR runtime 来触发页面级别的刷新或重新渲染,这可能导致部分页面状态的丢失。
随着项目的规模变大,冷启动的时间会geng
vite: 实现了更细粒度的模块更新,可以实现局部模块的更新而无需刷新整个页面,从而减少页面状态的丢失。
底层代码实现的区别?
webpack是用的node.js来实现的,node.js支持的生态库更多,前后端的一致性比较高,对于异步编程有着很好的支持,node.js的跨平台性比较好,在window,Mac,和linux等不同操作系统上都可以运行
总结
vite运行无需打包等编译工作,启动快,模块的引用和编译都是交由浏览器的ES的模块来完成的,
webpack运行需要先编译为bundle文件在启动的,而代码的改动会重新执行编译bundle文件。
链接: 原文