Vite知识体系 | 青训营笔记

39 阅读2分钟

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

为什么需要构建工具

  • 模块化:ESM、CommonJS、UMD
  • 资源编译:高级语法的编译
  • 产物质量:代码体积、代码性能
  • 开发效率:热更新

模块化方案

  • 提供模块加载方案
  • 兼容不同模块方案

语法转译

  • 高级语法转译
  • 资源加载

产物质量

  • 产物压缩,无用代码删除,语法降级

开发效率 -热更新

Vite 是什么?Why Vite

定位: 新一代前端构建工具 两大组成部分:

    1. No-bundle 开发服务,源文件无需打包
    1. 生产环境基于 Rollup 的 Bundler 核心特征
    1. 高性能,dev 启动速度和热更新速度非常快!
    1. 简单易用,开发者体验好

内置的 Web 构建能力

Vite 开箱即用的功能等价于

  • webpack
  • webpack-dev-server
  • css-loader
  • style-loader
  • less-loader
  • file-loader
  • MiniCssExtractPlugin
  • sass-loader
  • postcss-loader
  • HTMLWebpackPlugin

Vite 上手使用

  • 项目初始化
  • 使用 Sass/Scss & CSS Modules
  • 使用静态资源:除了常见的图片格式,Vite 也内置了对于 JSON、Worker、WASM 资源的加载支持
  • 使用 HMR
  • 生产环境 Tree Shaking

优化原理:

  1. 基于 ESM 的 import/export 语句依赖关系,与运行时状态无关
  2. 在构建阶段将未使用到的代码进行删除

Tree Shaking 在 Vite 中无需配置,默认开启

Vite 给你最直观的印象如何?

• 响应迅速 • 开箱即用

Vite 整体架构

为什么要进行预打包?

  1. 避免 node_modules 过多的文件请求
  2. 将 CommonJS 格式转换为 ESM 格式 实现原理:
  3. 服务启动前扫描代码中用到的依赖
  4. 用 Esbuild 对依赖代码进行预打包
  5. 改写 import 语句,指定依赖为预构建产物路径

用 Esbuild 编译 TS/JSX 优势: 编译速度提升 10-100

局限性: 不支持类型检查 不支持语法降级到 ES5

Esbuild 作为默认压缩工具,替换传统的 Terser、Uglify.js 等 压缩工具

开发阶段 -> 模拟 Rollup 插件机制

生产环境 -> 直接使用 Rollup

Vite 进阶路线

为什么需要插件机制? • 抽离核心逻辑 • 易于拓展