码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Vite知识体系简述


    ​​​​​​​

    目录

    ​编辑​​​​​​​

    1、浅谈构建构建工具

    1.1、前端为何要使用构建工具?

    构建工具这里从四个方面进行描述:

    2、Vite概要介绍

    2.1、Vite是什么?Why Vite?

    3、Vite上手实战

    3.1、Vite项目初始化

    3.2、使用Sass/Scss & Css Modules

    3.3、使用静态资源

    3.4、使用HMR

    3.5、生产环境 Tree Shaking

    4、Vite整体架构

    关键技术:依赖预打包

    关键技术:单文件编译

    关键技术:代码压缩

    关键技术:插件机制

    5、Vite进阶路线

    深入双引擎

    Vite插件开发

    代码分割(拆包)

    JS编译工具(Bable)

    语法安全降级

    服务器渲染

    深入了解底层标准


    1、浅谈构建构建工具

    1.1、前端为何要使用构建工具?

    前端通点:资源

    随着前端发展,涉及到的资源是越来越多,如何搞笑快速的进行资源管理问题避无可避,正是由于传统的资源管理方式所带来的一系列弊端,推荐了构建工具的诞生。

    构建工具这里从四个方面进行描述:

    1. 模块化:ESM、CommonJs、UMD

      模块化方案

      1. 提供模块加载方案

      2. 兼容不同模块规范

    2. 资源编译: 高级语法的编译

      语法转译

      • 高级语法转译:如Sass、TypeScript

      • 资源加载:如图片、字体、worker

    3. 产物质量: 代码体积、代码性能

      方案

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

    4. 开发效率: 热更新

    2、Vite概要介绍

    2.1、Vite是什么?Why Vite?

    定位: 新一代前端构架工具

    两大组成部分:

    1. No-bundle开发服务,源文件无需打包

    2. 生产环境基于Rollup的Bundler

    核心特征:

    1. 高性能,dev启动速度和热更新速度非常快

    2. 简单医易用,开发者体验好

    传统构架工具遇到的问题

    1. 缓慢的启动=>项目编译等待成本告

    2. 缓慢的热更新=>修改代码后不能实时更新

    瓶颈

    1. bundle带来的性能开销

    2. JS语言的性能瓶颈

    3、Vite上手实战

    3.1、Vite项目初始化

    • 提前安装 pnpm (需管理员权限)

      npm i -g pnpm
    • 初始化命令

      pnpm create vite
    • 安装依赖

      pnpm install
    • 项目启动

      npm run dev

    3.2、使用Sass/Scss & Css Modules

    • 安装Sass

      pnpm i sass -D
    • 目录结构

    • index.module.scss

      .header {
        color: red;
      }
    • index.tsx

      import  React from 'react';
      import styles from './index.module.scss';
      export function Header(){
        return 
      Header
      }
    • 效果:页面Header文字表现为红色

    3.3、使用静态资源

    • 用法:比如图片直接引入在需要的地方加上就即可

    3.4、使用HMR

    无需额外配置自动开启

    3.5、生产环境 Tree Shaking

    Tree Shaking 在Vite中 无需配置,自动开启

    优化原理

    1. 基于ESN的import/export 语句依赖关系,与运行时状态无关

    2. 在构架阶段将为使用道德代码进行删除

    理解:在打包时项目中引用单位使用的部分不会进行打包处理

    • 打包

      pnpm run build

    4、Vite整体架构

    关键技术:依赖预打包

    为什们要进行预打包?

    1. 避免node_moudles过多的文件请求

    2. 将COmmonJs格式转换为ESM格式

    实现原理:

    1. 服务器启动前扫描代码中用到的依赖

    2. 用Esbuild对依赖代码进行滚预打包

    3. 改写import语句,指定依赖为预构建产物路径

      //改写前
      import React from "react";
      //改写后
      import React from '/node_nodules/.vite/react.js'

    关键技术:单文件编译

    用Esbuild编译TS/JSX

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

    局限性

    • 不支持类型检查

    • 不支持语法降级为ES5

    关键技术:代码压缩

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

    关键技术:插件机制

    开发阶段:使用Rollup插件机制

    生产环境: 直接使用Rollup

    • 插件兼容性查阅传送

    5、Vite进阶路线

    深入双引擎

    • Esbuild

    • Rollup

    学习顺序

    • 先了解基本使用,动手尝试各项常用配置

    • 然后学习其插件开发

    为什么需要插件机制?

    • 抽离核心逻辑

    • 易于拓展

    Vite插件开发

    1. 服务启动阶段

      1. config

      2. configResolved

      3. options

      4. configureServer

      5. buildStart

    2. 请求相应阶段

      • transformIndexHtml

      • resolveId => load => transform

    3. 热更新阶段: handleHotUpdate

    4. 服务关闭阶段

      1. buildEnd

      2. closeBundle

    参考资料

    • Vite插件开发文档

    • 复杂度较低的插件:json加载插件

    • 复杂度中等的插件:Esbuild接入插件

    • 复杂度较高的插件:官方React插件

    代码分割(拆包)

    参考资料

    • 官方中文文档

    • rollup.js

    JS编译工具(Bable)

    出现原因:

    • JS语法标繁多,浏览器支持程度不一

    • 开发者需要用到高级语法

    参考资料:

    • babe官方站点

    • bable插件手册

    语法安全降级

    如何避免

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

    • 底层解决

      • 借助Bable进行语法自动降级

      • 提前注入Polyfill实现,如core-js,regenerator-runtime

    参考资料

    • @bable/preset-env文档

    • Vite官方降级插件文档

    服务器渲染

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

    参考资料

    • Vite-SSR

    深入了解底层标准

    • CJS规范

    • ESM规范

    • HTTP2.0特性

    参考资料

    • ES modules: A cartoon deep-dive - Mozilla Hacks - the Web developer blog

    • Publish ESM and CJS in a single package

    • 什么是PureESM

  • 相关阅读:
    SSL证书抵御企业网络攻击的风险
    【C++11新算法】all_of、any_of、none_of算法
    sklearn机器学习——day05
    java synchronized
    后端面试话术集锦第 十六 篇:java锁面试话术
    单片机之瑞萨RL78定时计数器
    4、Flink执行模式(流/批)详解(下)
    2023智慧云打印小程序源码多店铺开源版 +前端
    西安生物素-四聚乙二醇-酰胺-4苯酚 浅黄色半固态
    mysql:如何设计互相关注业务场景
  • 原文地址:https://blog.csdn.net/Flying____fish/article/details/126324069
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号