Vite | 青训营

65 阅读3分钟

为什么需要构建工具?

在开发过程中,有以下问题

  1. 模块化 ESM CommonJS UMD
  2. 资源编译

高级语法的编译 5. 产物质量

代码体积,代码性能 7. 开发效率 热更新

构建工具的意义

模块化方案

  1. 提供模块加载的方案
  2. 兼容不同模块的规范

语法转译

  1. 高级语法转译。如Sass,TypeScript
  2. 资源加载如,图片,字体,worker

产物质量

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

开发效率

热更新

Vite是什么

新一代前端构建工具

两大组成部分:

  1. No_bundke 开发服务,源文件无需打包
  2. 生产环境基于Rollup的Bunlder

核心特征:

  1. 高性能,dev启动速度和热更新速度非常快
  2. 简单易用。开发体验好

当下问题传统构建工具。 WebPack,rollup,parcel,browserify

  1. 缓慢的启动项目编译等待成本高,
  2. 缓慢的热更新,修改代码后,不能实时更新。

瓶颈在于:bundle带来的性能开销,JavaScript 语言的性能瓶颈

全球浏览器对原生ESM支持率达到92%,

export const a = "你好";
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="module">
      import { a } from "./index.js";
      console.log(a);
    </script>
  </head>
  <body></body>
</html>

Vite 基于原生ESM 的开发服务优势

  1. 无需打包项目源代码
  2. 天然的按需加载
  3. 可以利用文件级的浏览器缓存

image.png

Vite内置的web构建能力

  1. webpack
  2. webpack-dev-server
  3. css-loader
  4. style-loader
  5. less-loader
  6. sass-loader
  7. postcss-loader
  8. file-loader
  9. MiniCssExtracPlugin
  10. HTMLWebpackPlugin

如何使用Vite

#提前安装pnpm npm i -g pnpm

#初始化命令 pnpm create vite

#安装依赖 pnpm i

#启动项目 npm run dev

使用Sass/SCss & css modules

先npm i sass

import React, { memo } from "react";
import styles from "./CSS/index.module.scss";
const Header = () => {
  return <h1 className={styles.header}>telpmate</h1>;
};
export default memo(Header);

生产环境Tree Shaking

优化原理:

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

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

Vite整体架构

image.png

  1. 关键技术:单文件编译

用Esbuild编译TS/JSX

优势:编译速度提升10-100X

局限性: 不支持类型检查

不支持语法降到ES5 ,最低降到ES5

  1. 代码压缩

Esbuild 作为默认的压缩工具,替换传统的Terser,Uglify.js工具,提升梯度非常快

  1. 插件机制

image.png

开发阶段,是模拟Rouulp插件机制 生产环境 直接使用Rollup

Vite 进阶路线

深入双引擎

  1. 先学习基本使用。动手尝试各项常用配置

  2. 然后学习其插件开发

  3. JS编译工具(Babel)

出现的原因

  • JS语法标准繁多,浏览器支持的程度不一样
  • 开发者需要用到高级的语法

语法安全降级

以Promise为例,IE11中是不支持promise的,我们该怎么解决

  1. 上层解决方案:@vite/plugin-legacy

底层原理:借助Babel进行语法自动降级,提前注入Polyfill,如core-js,regenerator-runtion

服务端渲染

一种常见的渲染模式。用于提升首屏性能和SEO优化

image.png

了解底层标准

image.png

Vite社区生态

github仓库,官方文档