SSF0SSF0
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
  • HTML

    • html1
    • html2
  • CSS

    • Flex 布局常见问题与解决方案
  • JavaScript

    • 数据类型及引用问题
    • 处理 Blob 类型文件下载问题总结
    • localStorage 与 sessionStorage 区别
    • JavaScript 中的 script 标签问题详解
    • JavaScript 中的`this`指向问题详解
    • SessionStorage踩坑记录:它真的能"只设置一次"吗?
    • 动态加载 JS 脚本方法对比
    • 浏览器页面关闭场景下的数据上报
  • es6

    • Promise
    • es6 模块导出方式全解析
  • Vue2

    • created VS mounted 发起异步请求
    • vue2-2
  • Vue3

    • Vite + Vue3 修改 element-plus 源码
    • Vue v-if 与 v-show
    • Vue3 ref 获取组件
    • Vue3 路由传参
    • 父子组件与组件里 Hooks 加载顺序
    • 第三方组件传入参数TS提示
    • Vue3 Props 在 Hooks 中的响应性处理
    • Vue Router 的两种历史模式及部署配置详解
    • 在Vue 3项目中顺利集成Tailwind CSS的完整指南
    • Vue 3 深度选择器:deep()完全指南
  • Electron

    • 快速构建 electron + vue3 项目
  • TS

    • TS 泛型
    • 记录模板使用断言的问题
    • type 与 interface
  • WebPack

    • Webpack 介绍
  • Vite

    • Vite CLI 常见命令
    • vite 与 webpack 比较
  • 项目工程

    • 前端代码风格
    • Vue3 项目规范
    • npm 镜像问题
    • 包管理工具
    • 使用 engines 限制开发环境依赖
    • 打包与shell交互指定模式
    • 使用 pnpm 构建 Monorepo 实战指南
    • pnpm 修改依赖源码打包报错
  • 记录一下小程序
  • 控制浏览器正确保存网站账号密码的技巧

vite 与 webpack 比较

架构和工作原理

  • Vite:

    • 开发阶段:Vite 利用原生 ES 模块和浏览器的能力,在开发阶段不需要打包。Vite 使用一个开发服务器来提供模块,并在请求时进行按需编译和转换。

    • 生产阶段:在生产环境中,Vite 使用 Rollup 进行打包和优化,生成高效的静态文件。

  • Webpack:

    • 开发阶段:Webpack 使用一个复杂的依赖图,从入口文件开始,递归地解析和打包所有依赖。开发阶段通常使用 Webpack Dev Server 提供热更新和模块热替换。

    • 生产阶段:Webpack 在生产环境中进行完整的打包、优化和代码拆分,生成最终的静态文件。

性能和速度比较

  • Vite:

    • 快速启动:由于不需要预先打包,Vite 的启动速度非常快。

    • 快速热更新:Vite 只在浏览器请求时编译和转换模块,提供了极快的热更新速度。

  • Webpack:

    • 启动速度:Webpack 的启动速度较慢,特别是在大型项目中,因为需要预先解析和打包所有依赖。

    • 热更新速度:Webpack 的热更新速度较慢,因为需要处理整个依赖图。

配置和插件比较

  • Vite:

    • 配置简单:Vite 的配置相对简单,默认配置已经足够满足大部分需求。

    • 插件生态:Vite 有一个丰富的插件生态,很多插件是基于 Rollup 插件实现的。

  • Webpack:

    • 配置复杂:Webpack 的配置相对复杂,需要手动配置很多细节。

    • 插件生态:Webpack 有一个庞大的插件生态,可以实现几乎任何功能。

🌟Vite 的缓存机制

  1. .vite 目录

    • 首次运行:当你首次运行 Vite 开发服务器时,Vite 会在项目的 node_modules 目录下生成一个 .vite 目录。

    • 缓存作用:这个 .vite 目录用于存储开发阶段的缓存文件,包括预编译的依赖模块和转换后的代码,后续加载:在后续的开发过程中,Vite 会优先从 .vite 目录中读取缓存文件,从而加快编译和热更新速度。

  2. 缓存机制的优势

    • 快速启动:由于 Vite 只在请求时编译模块,并且利用缓存机制,启动速度非常快。

    • 高效热更新:Vite 的热更新机制非常高效,因为它只重新编译和更新变更的模块,而不是整个依赖图。

Webpack 的缓存机制

  1. 使用复杂的依赖图解析和打包机制,启动速度较慢,热更新相对较慢,但具有庞大的插件生态和强大的功能。通过持久化缓存、模块缓存、Loader 缓存以及 DllPlugin 和 DllReferencePlugin 等机制,Webpack 可以显著提高构建速度和开发体验

  2. 问题扩展 webpack 如果有缓存 为什么修改 node_modules 下的依赖会直接响应?

  • 缓存失效机制

    • 文件哈希检测:Webpack 会根据文件内容生成哈希值。当文件内容发生变化时,哈希值也会随之变化,这会导致缓存失效并触发重新编译。例如,如果你修改了 node_modules 下的某个依赖包的代码,Webpack 会检测到文件内容的变化,并重新编译该模块。

    • 文件系统监控:在开发模式下,Webpack Dev Server 使用文件系统监控(例如 chokidar)来监听文件变化。当文件发生变化时,Webpack 会触发重新编译和热更新。即使这些文件在 node_modules 目录下,Webpack 也会监控这些文件的变化。

  • 缓存策略

    • 模块缓存:Webpack 会缓存已经解析和编译的模块,但这个缓存是基于文件内容的哈希值。如果文件内容发生变化,Webpack 会认为缓存无效,并重新编译该模块。

    • 持久化缓存:即使启用了持久化缓存,Webpack 也会在每次构建时检查文件的哈希值。如果文件内容发生变化,持久化缓存也会失效,并重新编译相关模块。

最后更新时间:
贡献者: 何风顺
上一页
Vite CLI 常见命令