夜听城嚣 夜听城嚣
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏

dwfrost

前端界的小学生
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏
  • 导读
  • JS包管理工具和原理分析
  • yarn
  • CI环境上的npm优化
  • 对比主流构建工具
  • Vite实现原理
    • 从源码分析出发,构建 bundleless 开发工程
      • Vite 简介
      • Vite实现原理
  • core-js和polyfill
  • 梳理babel
  • 前端基建与架构
frost
2022-06-09

Vite实现原理

# 从源码分析出发,构建 bundleless 开发工程

# Vite 简介

Vite 是基于浏览器元素 ES imports 的开发服务器,利用浏览器去解析 imports,在服务器端按需编译返回,完全跳过“打包”的概念。--尤雨溪

Vite 在开发环境下没有打包和构建的过程,只有访问当前页面时,才去解析对应的依赖并加载资源。

# Vite实现原理

  • Vite利用浏览器原生支持ESM的特性,省略了对模块的打包过程,不需要生成bundle,因此项目启动快,HMR快。
  • Vite开发模式下,启动koa服务器,在服务端完成模块的改写(如单文件的解析编译)和请求处理,实现真正的按需编译。
  • Vite Server拦截请求后:
    1. 处理ESM语法
    2. 对.ts、.vue等文件进行即时编译
    3. 对Sass/Less等需要预编译的模块进行编译
    4. 和浏览器建立socket连接,实现HMR

vite_webpack

# Vite处理import方法

  • 在koa中间件中获取请求path对应的body内容
  • 通过es-module-lexer解析资源AST,并拿到import内容
  • 如果import的资源是绝对路径,则认为该资源是npm模块,去node_modules中找到对应的npm库,返回内容。

# serverPluginVue

对.vue文件请求进行处理,通过parseSFC方法解析单文件组件,并通过compileSFCMain方法将单文件组件拆分。

  • 对于template,使用@vue-compiler-dom编译模板

  • 对于style,调用compileSFCStyle方法编译组件样式,然后生成style标签插入到dom。

# Vite HMR实现原理

  • 通过watcher监听文件变动
  • server端编译资源,并推送新模块内容到浏览器
  • 浏览器收到新的模块内容,执行框架层面的rerender/reload

vite_hmr

#前端笔记
上次更新: 2022/06/09, 14:31:48
对比主流构建工具
core-js和polyfill

← 对比主流构建工具 core-js和polyfill→

最近更新
01
提交代码时修改commit消息
04-09
02
如何快速定位bug
02-20
03
云端web项目开发踩坑
08-25
更多文章>
Theme by Vdoing | Copyright © 2021-2025 dwfrost | 粤ICP备2021118995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×