字节青训前端笔记 | Vite 入门

news2024/9/20 9:09:58

本节课,讲师将前置介绍有关前端工程基本知识,同时讲解前端构建工具及解决问题,进而引出作为前端构建工具的 Vite 是什么及其在开发过程中的应用。

为什么使用构建工具

前端是有一系列资源组成的,js 代码,css样式,静态资源,他们产生了一系列的资源,他们有一系列的问题,而构建工具就是解决这些问题的:

  • 模块化

前端模块化有一些列常用的规范,但是还没有形成统一

解决:提供统一的模块加载方案,实现统一的模块规范

  • 资源编译

js , ts ,jsx 浏览器不认识,我们需要把他们编译成浏览器认识的

解决:构建工具会集成一些工具,实现语法转义和资源加载

  • 构建产物质量

代码需要压缩,兼容性问题,比如移动端需要兼容低端浏览器

解决:产物压缩、无用代码删除,语法降级

  • 开发效率

需要热更新

解决:提供热更新系统

Vite

vite 是新一代前端构建工具,No-bundle开发,源文件不需要打包,生成环境基于 rollup ,它的特点是:高性能,dev和热更新都很快,简单易用

vite 基于原生ESM开发服务 vite dev serve,无需打包项目源码,天然按需加载,可以利用文件级的浏览器缓存

vite 使用 go 开发的 esbuild 工具,摒弃了原生js开发的弊端

vite 内置了很多webpack的基础设置,包括 css 的解析,html 插件等等

Vite的使用

我们还是要首先下载依赖

pnpm i vite -g

之后我们就可以直接初始化一个 vite 项目了

pnpm create vite

之后依次输入 项目名称,框架(这里以react为例),语言(js/ts),进入项目,运行 pnpm install 下载所有的依赖就可以运行它了,之后可以看到在package.json 文件中有三条命令,分别是启动项目,打包和预打包

"scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "preview": "vite preview"
  },

vite 项目不需要任何配置就可以解析 ts tsx 这些组件,css,scss,less这些样式以及各类资源文件

对于样式,你可以在vite项目中使用 css module的形式编写样式,这样引入的样式名称在编译中会变成一个转换为一个唯一的hash值。这样可以有效解决类名冲突等问题,你们你有多个 css 模块可能使用了同一个类名字

//index.modules.scss
.main{
    color:red;
}

//app.tsx
import styles from './index.modules.scss';

<p className = {styles.main}></p>

对于资源的引用,你只需要在对于位置引入它,然后在 src 绑定他就行了,无论你使用什么路径引入,vite都会自动将他转化成相对路径

import reactLogo from './assets/react.svg'

<img src={reactLogo} className="logo react" alt="React logo" />

vite 默认使用热更新的方式,无需配置

vite 打包默认删去未使用的代码进行 tree-shaking

在 vite.config.ts 这个文件中,我们可以配置我们需要的插件,比如刚刚初始化的项目,我们需要引入一个 react的插件,当然你使用 vue 的话,可以引入vue的组件

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
})

vite的架构

请添加图片描述

Vite 进阶

  • 底层工具

esbuild 官方文档:https://esbuild.github.io/

rollup 官方文档:https://rollupjs.org/guide/

推荐先了解基本使用在了解插件开发

  • 插件

插件的作用是抽离核心逻辑,易于维护,易于拓展,生态丰富

vite 插件的钩子 hooks:你可以在对于的钩子处调用它实现不同的功能

请添加图片描述

插件的开发可以参考这个:https://cn.vitejs.dev/guide/api-plugin.html

  • 代码分割

vite 之前的打包一般代码都在一个文件里,无法进行并发求情,缓存利用率低,修改任何文件,都需要重新打包。

拆包就是就是把核心代码分成多个包,如果一个包修改了,其他包不受影响,学习 rollup 的代码分割,vite 就是基于 rollup 的代码分割的

  • babel

js 的语法标准繁多,但是浏览器支持不一致,但是开始想要使用高级的语法,babel 就是把高级代码进行降低的工具,原理可以查看官网文档:https://babeljs.io/docs/en/

并且babel 也可以配置插件,你也可以自己编写其插件,你可以查看这个手册来学习:https://github.com/jamiebuilds/babel-handbook/blob/master/translations/zh-Hans/plugin-handbook.md

  • SSR

这是一种常见的渲染模式,用于优化提升首屏幕的性能。vite提供了 vite-ssr 项目打包渲染的方案 ,可以查看官方文档 https://cn.vitejs.dev/guide/ssr.html

  • 底层标准

https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/
请添加图片描述

  • 社区生态

vite 提供了良好的社区生态,社区可以有大量的其他开发者编写的插件等,可以前往寻找你需要的组件 : https://github.com/vitejs/awesome-vite

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32 Micropython编程(Thonny)04---- 人体感应模块

本人持续分享更多关于嵌入式和单片机的知识&#xff0c;如果大家喜欢&#xff0c;别忘点个赞加个关注哦&#xff0c;让我们一起共同进步 最近使用到人体感应模块HC-SR501&#xff0c;这个模块使用十分简单&#xff0c;看下面代码就可以看出了&#xff0c;而且应用广泛&#xff…

Java 优先级队列(堆)

目录1. 优先级队列&#xff08;堆&#xff09;的概念2. 建立大根堆&#xff08;向下调整算法&#xff09;3. 堆插入元素&#xff08;向上调整算法&#xff09;4. 堆删除元素&#xff08;向下调整算法&#xff09;5. 优先级队列PriorityQueue的特性6. 优先级队列PriorityQueue的…

单向环形链表和约瑟夫问题

单向环形链表和约瑟夫问题 Josephu 问题为&#xff1a;设编号为1&#xff0c;2&#xff0c;… n的n个人围坐一圈&#xff0c;约定编号为k&#xff08;1<k<n&#xff09;的人从1开始报数&#xff0c;数到m 的那个人出列&#xff0c;它的下一位又从1开始报数&#xff0c;数…

ubuntu压缩、归档 tar zip gzip的介绍

不同文件需要使用不同的工具进行压缩和解压&#xff0c;可以使用file文件查看是什么类型的文件 file 文件名如图&#xff0c;在第二行看到这个文件是gzip类型的。 文件&#xff1a;gzip 工具&#xff1a;gunzip gunzip是 gnu unzip的缩写。用来解压gzip压缩包。 解压命令 …

linux 内存管理

0.前言 1.了解Linux内存的管理机制(分段分页) 2.了解虚拟内存和物理内存的映射方式 3.了解操作系统内存与磁盘的交互&#xff08;分页机制---》缺页重读机制&#xff0c;用时拷贝机制) 4.应用程序如何高效使用内存和高级程序的设计方法 1.linux物理使用情况 内核区&#x…

动态站点地图提交百度收录

站点地图&#xff08;sitemap&#xff09;是一个网站的结构化数据&#xff0c;搜索引擎可以通过站点地图迅速了解一个网站的内容&#xff0c;加快搜索引擎收录。 一般来说&#xff0c;站点地图是以.xml结尾的静态化文件&#xff0c;例如个人博客和生化环材网的站点地图链接分别…

【Mysql】事务的四大特性(ACID)

【Mysql】事务的四大特性(ACID) 文章目录【Mysql】事务的四大特性(ACID)1. 概述1.1 并发事务问题1.1.1 脏读1.1.2 不可重复读1.1.3 幻读1.2 事务隔离级别1. 概述 事务的四大特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是不可分割的最小操作单…

ROS学习寄录2

1 ROS核心概念 1.1 节点&#xff08;Node&#xff09; &#xff08;1&#xff09;执行具体任务的进程、独立运行的可执行文件 &#xff08;2&#xff09;不同节点可以使用不同的语言&#xff0c;可分布式运行在不同的主机 &#xff08;3&#xff09;节点在系统中的名称必须…

MODBUS总线的学习笔记

MODBUS学习记录 下面所有资料均copy于安富莱电子和博客中&#xff0c;仅作为个人学习笔记记录&#xff0c;写的不好请见谅。 1.modbus简介介绍 Modbus 是由 Modicon&#xff08;现为施耐德电气公司的一个品牌&#xff09;在 1979 年发明的&#xff0c;是全球第一个真正 用于…

PowerShell 学习笔记:操作XML文件

XML文件是有一定格式要求的文本文件。百度百科可扩展标记语言 (Extensible Markup Language, XML) &#xff0c;标准通用标记语言的子集&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展…

adversarial Learning and attacks 学习笔记

GANs大家是比较熟悉的网络结构&#xff0c;adversarial attacks 也不是很新的概念了。近期的工作有涉及到adversarial attacks&#xff0c;故整理一下学习的内容。 Adversarial Attacks 对抗攻击样本&#xff1a;一张正常的大熊猫图片&#xff08;左图&#xff09;在被加入噪…

Leetcode.1828 统计一个圆中点的数目

题目链接 Leetcode.1828 统计一个圆中点的数目 题目描述 给你一个数组 points&#xff0c;其中 points[i] [xi, yi] &#xff0c;表示第 i个点在二维平面上的坐标。多个点可能会有 相同 的坐标。 同时给你一个数组 queries&#xff0c;其中 queries[j] [xj, yj, rj]&#x…

Feign入门

Feign入门Feign入门Feign代替RestTemplate自定义配置Feign使用优化最佳实践Feign入门 Feign代替RestTemplate RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user/" order.ge…

linux(Debian11)安装后安装无线网卡等驱动

在工作和生活中&#xff0c;我们经常会用到linux系统&#xff0c;debian作为一个老牌的程序员常用发行版&#xff0c;自然成为我们的首选。 下面记录一下&#xff0c;安装无线网卡的过程。 首先&#xff0c;可以通过命令查看自己所需要的驱动 lspci -vvv iwlwifi 就是我所需…

机器学习为什么使用归一化? 有哪些归一化算法?

一、归一化的基本介绍 1. Why 归一化? 一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。或者举一个更浅显的例子:对房子进行…

Java——组合总和(3)

题目链接 leetcode在线oj——组合总和&#xff08;3&#xff09; 题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff…

计算机网络 —— TCP篇 TCP 重传、滑动窗口、流量控制、拥塞控制

计算机网络系列文章目录 TCP篇 TCP 重传、滑动窗口、流量控制、拥塞控制 文章目录计算机网络系列文章目录前言4.2 TCP 重传、滑动窗口、流量控制、拥塞控制4.2.1 重传机制超时重传什么情况会触发超时重传超时时间应该设置为多少呢&#xff1f;快速重传SACKD-SACK4.2.2 滑动窗…

【数据结构之二叉树系列】万字深剖数据结构---堆

目录前言一、堆二、堆的实现(重点)1. 数据类型重定义2. 堆结构的定义3. 堆结构的重定义三、堆中常见的基本操作&#xff08;重点&#xff09;1. 声明2. 定义&#xff08;1&#xff09;初始化&#xff08;2&#xff09;销毁&#xff08;3&#xff09;插入数据&#xff08;4&…

macOS Monterey 12.6.3 (21G419) 正式版 ISO、IPSW、PKG 下载

macOS Monterey 12.6&#xff0c;皆为安全更新&#xff0c;不再赘述。 macOS Monterey 12.6&#xff0c;发布于 2022 年 9 月 12 日&#xff08;北京时间今日凌晨&#xff09;&#xff0c;本次为安全更新。 今日&#xff08;2022-07-21&#xff09;凌晨&#xff0c;Apple 终于…

ATAC-seq分析:Peak Calling(8)

1. 寻找开发区域 ATACseq 的一个共同目标是识别转录因子结合和/或转录机制活跃的无核小体区域。该核小体游离信号对应于小于一个核小体的片段&#xff08;如 Greenleaf 论文中定义 < 100bp&#xff09;。 然而&#xff0c;为了识别开放的染色质&#xff0c;我们可以简单地使…