Vite基本概要

一、Vite 简介

Vite 是一种新型的前端构建工具,旨在为现代 web 开发提供更快、更精简的开发体验。它由尤雨溪(Vue.js 的作者)团队开发,在当下的前端项目中被广泛应用,尤其适合基于现代 JavaScript 框架(如 Vue、React 等)构建的项目。

与传统的构建工具(如 Webpack)相比,Vite 利用了浏览器原生支持的 ES 模块(ES Modules),在开发阶段不需要像传统方式那样将所有模块提前打包,而是按需进行编译和加载,从而实现了极快的冷启动速度和模块热替换(HMR),大大提升了开发效率。

二、Vite 的核心特点

1. 快速的冷启动

在传统构建工具启动开发服务器时,往往需要对整个项目的代码进行打包分析等一系列复杂操作,耗时较长。而 Vite 基于 ES 模块的特性,在启动时只需启动一个轻量级的开发服务器,然后直接将浏览器指向源文件,浏览器会按照 ES 模块的规则自动去加载依赖,无需提前全量打包,所以能在瞬间启动项目,开发者可以快速进入开发状态。

例如,对于一个中大型的 Vue 项目,使用 Webpack 启动开发服务器可能需要数秒甚至十几秒,而 Vite 往往能在几百毫秒内就启动完成。

2. 高效的模块热替换(HMR)

当我们在开发过程中修改了代码,Vite 能够精准地定位到发生变化的模块,并仅仅更新该模块对应的内容在浏览器中的显示,无需刷新整个页面。这使得开发者可以实时看到代码修改后的效果,保持开发的连贯性,进一步提高开发效率。

比如在修改一个 Vue 组件的样式或者逻辑时,修改后几乎立即就能在浏览器中看到更新后的样子,操作体验非常流畅。

3. 原生 ES 模块支持

Vite 充分利用了现代浏览器原生支持 ES 模块这一特性。在开发阶段,Vite 直接将代码以 ES 模块的形式提供给浏览器,浏览器会按照 ES 模块的规范去解析和加载依赖,减少了中间转化的成本。不过在生产环境下,Vite 还是会对代码进行打包优化等处理,以保证最佳的性能和兼容性。

4. 插件化架构

Vite 拥有丰富的插件生态,通过插件可以轻松扩展其功能,满足各种不同的项目需求。无论是对特定文件类型的处理、优化开发体验,还是与第三方工具的集成等,都可以通过编写或使用现有的插件来实现。

例如,有插件可以帮助优化 CSS 的处理、实现对 SVG 文件的特殊处理,或者将项目与后端 API 进行更好的联调等。

三、Vite 的基本使用

1. 安装

要使用 Vite,首先需要全局安装它的脚手架工具:

npm install -g create-vite
# 或者使用 yarn
yarn global add create-vite

安装完成后,就可以用它来创建新项目了。

2. 创建项目

使用以下命令创建一个基于 Vite 的项目(以 Vue 项目为例):

# 创建一个基于 Vue 的 Vite 项目,项目名称为 my-vite-project
create-vite my-vite-project --template vue

这里的 --template 参数可以指定不同的模板,除了 vue,还可以选择 reactpreact 等,根据自己的项目框架需求来定。

创建完成后,进入项目目录:

cd my-vite-project
3. 安装项目依赖并启动开发服务器

在项目目录下,运行以下命令安装依赖:

npm install
# 或者
yarn install

然后启动开发服务器:

npm run dev
# 或者
yarn dev

此时,Vite 会启动开发服务器,并且在控制台输出项目运行的地址(一般是 http://localhost:3000 之类的),打开浏览器访问该地址,就能看到项目运行起来了。

4. 项目结构

一个典型的 Vite 项目结构如下:

my-vite-project/
├── node_modules/
├── public/
│   └── favicon.ico
├── src/
│   ├── assets/
│   ├── components/
│   ├── App.vue
│   └── main.js
├── index.html
├── package.json
├── vite.config.js
└── README.md

  • public 目录:存放一些公共的静态资源,比如网站图标等,这些资源会被直接复制到项目的根目录下,在 HTML 中可以直接通过相对路径引用。
  • src 目录:是项目的主要源代码目录,包含了各种组件、样式、业务逻辑代码等。
  • index.html:项目的入口 HTML 文件,Vite 会将其作为开发服务器的入口,并且在构建生产版本时,也会基于此文件进行处理。
  • vite.config.js:Vite 项目的配置文件,在这里可以配置插件、服务器相关选项、构建相关的设置等,用来定制化项目的构建和开发流程。
5. 配置文件(vite.config.js)

下面是一个简单的 vite.config.js 文件示例,用于配置一些基础的功能,比如添加插件、设置服务器端口等:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';export default defineConfig({plugins: [vue()],server: {port: 3001, // 设置开发服务器的端口为 3001},
});

  • plugins 字段:用于配置项目需要使用的插件,这里引入了 @vitejs/plugin-vue 插件来支持 Vue 项目的编译等相关处理,不同的项目框架需要对应的插件支持。
  • server 字段:可以对开发服务器进行各种设置,除了端口,还可以配置代理等功能,方便与后端 API 进行联调。例如,设置代理可以这样写:
server: {port: 3001,proxy: {'/api': {target: 'http://localhost:8080', // 后端 API 地址changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, ''),},},
},

这样,前端项目中以 /api 开头的请求都会被代理到 http://localhost:8080 这个后端服务器地址上。

6. 构建生产版本

当项目开发完成,需要部署到生产环境时,可以使用以下命令构建项目:

npm run build
# 或者
yarn build

Vite 会对项目进行打包、优化等一系列操作,生成可以直接部署到服务器上的静态文件,一般会生成 dist 目录,里面包含了 HTML、CSS、JavaScript 等经过处理后的文件,将这个目录下的内容部署到服务器相应位置即可让网站上线运行。

四、Vite 与不同框架的结合

1. Vue 项目

  • 如前面所述,创建 Vue 项目时使用对应的 vue 模板即可。在项目中编写 Vue 组件、使用 Vue 的各种特性(如 Composition APIOptions API 等)都和常规的 Vue 开发类似,Vite 会自动处理好相关的编译和优化工作。
  • 对于 Vue 的单文件组件(.vue 文件),Vite 借助插件可以很好地解析其中的 <template><script> 和 <style> 部分,将它们分别编译成对应的 JavaScript、CSS 等代码。
2. React 项目

  • 创建 React 项目时选择 react 模板,例如:
create-vite my-react-project --template react

  • 在 React 项目中,可以正常使用 React 的各种 API(如 useStateuseEffect 等)来构建组件、处理逻辑。Vite 会确保 React 项目中的 JSX 等语法能够被正确编译和处理,同时也能享受到 Vite 的快速开发和构建优势。
3. 其他框架

除了 Vue 和 React,Vite 也支持 Preact、Svelte 等其他前端框架,使用方式类似,都是通过选择对应的模板来创建项目,然后按照各自框架的开发规范进行代码编写,Vite 会在底层做好适配和构建相关的工作。

五、Vite 的生态与社区

Vite 在前端社区中拥有庞大的生态,有大量的开源插件可供选择,涵盖了从代码风格检查、性能优化到与各种第三方工具集成等方方面面。同时,很多开发者也在不断分享关于 Vite 的使用经验、最佳实践以及各种实际项目中的案例,通过参与社区(如 GitHub 上的 Vite 仓库、相关论坛等)可以及时了解到 Vite 的最新动态、学习他人的优秀做法,进一步提升自己运用 Vite 进行前端开发的能力。

总之,Vite 作为一个强大且高效的前端构建工具,为前端开发带来了诸多便利,值得深入学习和掌握,希望这份笔记能帮助你更好地开启 Vite 的自学之旅呀!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift 实现查找链表入环点:快慢指针法

文章目录 前言摘要描述题解答案题解代码题解代码分析示例测试及结果时间复杂度空间复杂度总结 前言 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 142. 环形链表 II 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无…

stable-diffusion-webui在conda pycharm中运行

目录 简介下载conda环境配置环境变量修改launch_utils.py文件运行stable-diffusion-webui下载模型文本生成图片参考 简介 stable-diffusion-webui是AI绘画 Stable Diffusion浏览器UI界面&#xff0c;为用户提供了一个简单、直观的方式来利用 Stable Diffusion 技术创建视觉内容…

小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(7)嵌入式Soc

越努力&#xff0c;越幸运&#xff01; 分享一个晚霞&#xff0c;真的好美啊&#x1f496;&#xff01; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 不得不说&#xff0c;我还是喜欢在人少的地方生活啊。 flechazohttps://www.zhihu.com/people/ji…

【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践

文章目录 一、前言二、什么是“纵深安全防御”&#xff1f;三、为什么有必要采用纵深安全防御策略&#xff1f;四、以亚马逊云科技为案例了解纵深安全防御策略设计4.1 原始设计缺少安全策略4.2 外界围栏构建安全边界4.3 访问层安全设计4.4 实例层安全设计4.5 数据层安全设计4.6…

产业用机器人中的旋转花键若损伤有何影响?

旋转花键在产业用机器人中是关键的组件之一&#xff0c;如果机器人中的旋转花键损坏&#xff0c;会对机器人的运行和性能产生一定影响。以下是可能的影响&#xff1a; 1、功能受限&#xff1a;旋转花键用于连接两个旋转部件&#xff08;例如电机轴和传动轴&#xff09;&#xf…

基于STM32的火灾报警装置的Proteus仿真

文章目录 一、火灾报警1.题目要求2.思路2.1 主控2.2 传感器2.3 设定阈值--按键2.4 报警和通风2.5 OLED显示2.6 电源部分2.7 远程终端 3.仿真3.1 未仿真时3.2 仿真开始&#xff0c;界面13.3 切换界面23.4 切换界面3 4.仿真程序4.1 程序说明4.2 主函数4.3 OLED显示函数 二、总结 …

人脸检测开源项目介绍【持续更新】

DeepFace 介绍&#xff1a;DeepFace是一个轻量级的人脸识别和面部属性分析框架&#xff0c;专为Python设计。它集成了多种前沿的深度学习模型&#xff0c;包括VGG-Face、FaceNet、OpenFace、DeepFace、DeepID、ArcFace、Dlib、SFace和GhostFaceNet等&#xff0c;能够进行年龄、…

RabbitMQ 之 死信队列

一、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理 解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c;consumer 从 queue 取出消息进行…

使用 LSTM(长短期记忆网络) 模型对时间序列数据(航空旅客人数数据集)进行预测

代码功能 数据准备 加载数据&#xff1a;从公开的航空旅客人数数据集&#xff08;Airline Passengers Dataset&#xff09;中读取时间序列数据。 对数变换和平稳化&#xff1a;对数据应用 log1p 函数减少趋势和波动&#xff0c;使模型更容易学习规律。 归一化处理&#xff1a;…

《操作系统 - 清华大学》5 -2:覆盖技术

文章目录 1. 目标2. 覆盖的基本原理3. 覆盖技术的不足 1. 目标 覆盖技术产生于上世纪80年代和90年代初的时候&#xff0c;在那时候操作系统能力是很弱的&#xff0c;所以说当初目标是要在能够比较小的可用内存中运行比较大的程序&#xff0c;这个比较小&#xff0c;比较大的相对…

使用 Nginx 在 Ubuntu 22.04 上安装 LibreNMS 开源网络监控系统

#LibreNMS 是一个功能强大的开源网络监控系统&#xff0c;它能够为你的网络性能和设备提供全面的监控。本文将引导你通过一系列步骤&#xff0c;在 Ubuntu 22.04 服务器上安装和配置 LibreNMS&#xff0c;使用 Nginx 作为 Web 服务器。 简介 LibreNMS 提供了对网络设备和性能…

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…

【Redis_Day5】String类型

【Redis_Day5】String类型 String操作String的命令set和get&#xff1a;设置、获取键值对mset和mget&#xff1a;批量设置、获取键值对setnx/setex/psetexincr和incrby&#xff1a;对字符串进行加操作decr/decrby&#xff1a;对字符串进行减操作incrbyfloat&#xff1a;浮点数加…

谷歌云无法ssh登录(修改sshd_config也不行)

sudo -i vi /etc/ssh/sshd_config passwd root /etc/init.d/ssh restart service sshd restart 这是网站大部分教程讲的&#xff0c;但是我实际试了还是连不上 参考https://linux.do/t/topic/260732/15 原来/etc/ssh/sshd_config.d/下面有个60开头的文件&#xff0c;也需…

【FPGA-MicroBlaze】串口收发以及相关函数讲解

前言 工具&#xff1a;Vivado2018.3及其所对应的SDK版本 目前网上有许多MicroBlaze 的入门教程&#xff0c;比如下面的这个参考文章&#xff0c;用串口打印一个hello world。 【FPGA】Xilinx MicroBlaze软核使用第一节&#xff1a;Hello World!_fpga软核microblaze-CSDN博客 个…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动&#xff0c;先不着急直接上手撸应用层的代码&#xff0c;先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码&#xff08;vlc好像不支持h265,这个后边我试试&#xff09;的视频流&#xff0c;先需要支持上rtsp server&#xff0c;了解rtsp协议是必…

渗透测试---shell(7)for循环2与while循环

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人与泷羽sec团队一律不承担一切后果 视频地址&#xff1a;泷羽--shell&a…

CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读

abstract 大规模对比视觉-语言预训练在视觉表示学习方面取得了显著进展。与传统的通过固定一组离散标签训练的视觉系统不同&#xff0c;(Radford et al., 2021) 引入了一种新范式&#xff0c;该范式在开放词汇环境中直接学习将图像与原始文本对齐。在下游任务中&#xff0c;通…

C++初阶(十五)--STL--list 的深度解析与全面应用

文章目录 一、头文件与基本概念 二、构造函数和析构函数 1.构造函数 2.析构函数 三、元素访问 front back 四、迭代器相关函数 begin end rebegin&#xff08;反向迭代器&#xff09; rend&#xff08;反向迭代器&#xff09; 五、容量相关函数 empty size max…

一个关于 CSS Modules 的陷阱

我在引用 less 文件样式的时候&#xff0c;发现 index.less .drag_upload {width: 100%;height: 90vh;padding: 20px; }index.jsx import React, { useState, useEffect } from react; import styles from ./index.less;export default ({ }) > {return (<div classNa…