vite初了解 | 青训营笔记

138 阅读2分钟

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

vite简介

构建工具

为什么需要构建工具:

  • 前端所需资源过多
  • 没有统一的模块化方案
  • 资源边缘问题
  • 产物质量
  • 开发效率

构建工具意义:

  • 提供模块化方案与兼容不同模块方案
  • 高级语法转译与资源加载
  • 提高产物质量
  • 照顾开发效率

什么是vite

定位: 新一代构建工具

两大组成部分:

  • no-bundle
  • 基于rollup的bundler

核心特征:

  • 高性能(相比webpack要快了不少)
  • 简单易用

传统构建器的问题:

  • 启动缓慢
  • 热更新缓慢
  • 瓶颈:bundle与js的性能开销

行业趋势:

  • 浏览器支持原生ESM
  • 基于原生语言的前端编译链(Go,Rust)

利用ESM的优势:

  • 无需打包项目源代码
  • 按需加载
  • 可以利用文件级的浏览器缓存

编译优势:

  • esbuild非常快(谁用谁知道)
  • 集成度很高,配置文件小(写过webpack配置文件的都知道)

使用

  1. 项目初始化
  2. 利用CLI进行配置
  3. 引入依赖
  4. 进行编码
  5. 使用静态资源
  6. 生成环境用不到的代码会被优化

vite的关键技术:

  1. 预打包

    1. why:

      1. 避免node_modules
      2. 将CommonJS转换为ESM
    2. 原理:

      1. 开始前扫描依赖
      2. esbuild预打包
      3. 改写import语句(指定依赖为预构建产物路径)
  2. 单文件编译:

    1. 优势:编译速度快(非常快)

    2. 劣势:不支持类型检查;不支持语法降级

      所以需要tsc

  3. 代码压缩:esbuild构建

  4. 插件机制

    1. 开发:模拟rollup
    2. 生产:直接使用

Vite插件:

为什么需要插件机制:

  1. 抽离核心逻辑
  2. 易于拓展

vite插件开发:

  1. 服务启动阶段:

    1. config
    2. configResolved
    3. options
    4. configServer
    5. buildStart
  2. 请求响应阶段

    1. transfromIndexHTML
    2. resolveID
    3. load
    4. transform
  3. 热更新阶段

    1. handleHotUpdate
  4. 服务关闭阶段:

    1. buildEnd
    2. closeBundle

一点拓展:

代码拆包:

未拆包前无法利用浏览器的缓存优势(其实浏览器优化了大量的这一模块,不用太可惜了)

拆包后可以定向更新,只更新变化了的部分

babel:

es6出现后浏览器不支持,但开发者很喜欢,于是就诞生了babel