vite和webpack的区别

191 阅读2分钟
webpack 原理图

Snipaste_2023-09-11_14-04-06.png

vite 原理图

Snipaste_2023-09-11_14-04-21.png

简介:

   webpack的打包主要依赖于 CommonJs ,vite是 esModule 为主;且vite充分利用 esbuild (更快的打包)和 rollup (合理的插件系统设计)这些当代先进工具。

   CommonJs可以实现的功能esModule都可以实现,并且,相较于前者,esModule的优点有:
   1. 支持并行导入和动态导入
   2. ES Module 是 JavaScript 的官方模块标准,现代浏览器原生支持,无需额外的工具或转换器。
   3. ES Module 在导入语句中进行静态分析,这意味着模块的依赖关系在编译时就已经确定,可以进行更多的优化和分析。

   webpack是将所有module打包成一个bundle,vite是按需引入module;所以前端项目服务器启动和重启更快速。感觉vite是一个充满活力的青年人,其设计模式合理且新潮;只是存在的时间没有webpack那么长,其社区解决方案,对于各个插件的支持,可配置性(但vite配置更简单,不冗余)不如webpack。但这些都是新框架必然会有的问题。
   所以,vite确实是现在最先进最合理的web项目开发和打包环境。

   vite和webpack的讨论

vite中的常用配置

  1. 和css相关的配置

    • css.preprocessorOptions: 这些配置会传递到scss等预处理器的执行参数中去
    • css.postcss:也是用来处理 CSS 的,只不过它更像是一个工具箱,可以添加插件
  1. resolve 配置项

    • resolve.alias: 配置别名
    • resolve.extensions(array): 可以省略的import 文件后缀(类型名)
  1. 是否开启强制依赖预构建 - optimizeDeps.force

    • node_modules 中的依赖模块构建过一次就会缓存在 node_modules/.vite/deps 文件夹下,下一次会直接使用缓存的文件。而有时候我们想要修改依赖模块的代码,做一些测试或者打个补丁,这时候就要用到强制依赖预构建。
  1. 服务器 server 相关的配置(判断环境使用import.meta.env.xxx 而不是 process.env.NODE_ENV)

    • server.host: 默认是localhost
    • server.proxy:反向代理,通常用于解决跨域问题
  2. build打包相关

    • build.outdir:指定打包文件的输出目录。默认值为 dist
    • build.assetsDir:指定生成静态资源的存放目录。默认值为 assets
    • build.assetsInlineLimit:图片转 base64 编码的阈值。为防止过多的 http 请求
  1. plugins - 让我们可以使用官方插件,也可以社区插件。