Vite | 青训营笔记

48 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第14天

Vite

为什么需要构建工具,前端构建工具的意义

  • 模块化-- 提供模块化加载方案,兼容不同模块规范
  • 资源编译--高级语法转译
  • 产物质量--产物压缩,无用代码删除,语法降级
  • 开发效率--热更新

2023-02-10_192920.png

组成部分

  • No-Build 开发服务,源文件无需打包
  • 生产环境基于Rollup 的Budler

核心特征

  • 高性能,dev启动速度特别快
  • 简单易用,开发者性能很好

问题

  • 缓慢启动-项目编译等待成本高

  • 缓慢热更新-修改代码后不能及时更新

  • bundle带来性能开销

  • JavaScript性能瓶颈上限

趋势

浏览器原生ESM支持

  • script标签type="module"属性
  • 使用ESM导出语法
  • 基于原生ESM开发优势
  • 无需打包项目源代码
  • 天然的按需加载
  • 可以利用文件级浏览器缓存

基于Esbuild的编译性能优化

  • 打包器Bundler
  • 编译器 Transformer
  • 压缩器 Minifier

2023-02-10_192947.png

项目

集成TypeScript的支持

  • "dev":"vite" 开发环境
  • "build":"tsc && vite build"生产环境下构建打包
  • "preview":"vite preview"产出产物的预览方式

生产环境 tree Shaking

在vite之中是不要配置,底层默认是打开的

优化原理

  • 基于ESM的import/export语句依赖关系,与运行时的转台无关
  • 在构建阶段未使用到的代码进行删除

整体框架

2023-02-10_195048.png

必须预编译-关键技术-依赖预打包‘

打包原因

  • 避免过多node_modules过多文件请求
  • 将CommonJs转换成ESM格式

实现原理

  • 服务启动前扫描代码中的依赖
  • 用Esbuild对依赖代码进行预打包
  • 改写import语句,指定依赖为与构建的产物路径

2023-02-10_195726.png