当前位置: 首页 > news >正文

Vite 使用学习指南

Vite 的基本概念和特点

Vite 是什么,它的主要特点是什么

Vite 是一个基于 ES modules 的前端构建工具,它的主要特点包括:

  1. 快速的冷启动:Vite 采用了基于浏览器原生 ES 模块的开发模式,可以在开发时快速启动应用,减少了冷启动时间。

  2. 按需编译:Vite 可以根据需要动态地编译模块,而不是像传统的打包工具一样将所有模块都打包到一个文件中。

  3. 热更新:Vite 支持热更新,可以在开发时实时更新修改后的代码,提高开发效率。

  4. 插件化:Vite 支持插件化,可以通过插件扩展 Vite 的功能。

  5. 支持多种前端框架:Vite 支持多种前端框架,包括 Vue、React、Angular 等。

Vite 和传统的打包工具(如 webpack)有什么不同

Vite 和传统的打包工具(如 webpack)有以下不同点:

  1. 构建方式不同:Vite 采用了基于浏览器原生 ES 模块的开发模式,可以在开发时快速启动应用,减少了冷启动时间,而 webpack 则是将所有模块打包到一个文件中。

  2. 编译方式不同:Vite 可以根据需要动态地编译模块,而不是像 webpack 一样将所有模块都打包到一个文件中。

  3. 热更新方式不同:Vite 支持热更新,可以在开发时实时更新修改后的代码,而 webpack 则需要重新编译整个应用才能看到修改后的效果。

  4. 插件化方式不同:Vite 支持插件化,可以通过插件扩展 Vite 的功能,而 webpack 则需要通过 loader 和 plugin 扩展其功能。

  5. 支持的框架不同:Vite 支持多种前端框架,包括 Vue、React、Angular 等,而 webpack 则需要通过相应的 loader 和 plugin 来支持不同的框架。

总之,Vite 和 webpack 在构建方式、编译方式、热更新方式、插件化方式和支持的框架等方面都有所不同。Vite 更加轻量、快速、灵活,适合于开发小型应用和组件库,而 webpack 则更加适合于大型应用的构建和优化。

安装和配置 Vite

安装 Vite 可以通过 npm 或 yarn 进行安装。具体步骤如下:

  1. 打开终端或命令行工具,进入项目目录。

  2. 使用以下命令安装 Vite:

    • 使用 npm 安装:npm install vite

    • 使用 yarn 安装:yarn add vite

  3. 安装完成后,可以在 package.json 文件中查看 Vite 的版本信息。

注意:在安装 Vite 之前,需要确保已经安装了 Node.js 和 npm 或 yarn。

配置 Vite 的基本选项

vite.config.js 是 Vite 的配置文件,可以用来配置 Vite 的各种选项。以下是 vite.config.js 中可以配置的所有选项:

  1. root:指定项目根目录,默认为当前工作目录。

  2. base:指定应用部署的基础路径,默认为 /。

  3. mode:指定应用的模式,可以是 development 或 production,默认为 development。

  4. server:配置开发服务器的选项,例如端口号、代理等。

  5. build:配置构建选项,例如输出目录、是否压缩代码等。

  6. plugins:配置使用的插件。

  7. resolve:配置模块解析选项,例如别名、扩展名等。

  8. css:配置 CSS 相关选项,例如是否提取 CSS、是否压缩 CSS 等。

  9. optimizeDeps:配置依赖优化选项,例如是否预构建依赖、是否忽略某些依赖等。

  10. define:配置全局变量,可以在代码中使用。

  11. esbuild:配置 esbuild 的选项,例如是否启用 JSX、是否启用 TypeScript 等。

  12. alias:配置模块别名,可以简化模块路径。

  13. logLevel:配置日志级别,可以控制日志输出的详细程度。

  14. clearScreen:配置是否在每次构建前清空控制台输出。

  15. emitAssets:配置是否输出构建产物。

  16. rollupInputOptions:配置 Rollup 的输入选项。

  17. rollupOutputOptions:配置 Rollup 的输出选项。

以上是 vite.config.js 中可以配置的所有选项,具体的使用方法可以参考 Vite 的官方文档。

使用 Vite 开发 Vue 应用

  1. 首先,安装 Vue CLI 和 Vite:
npm install -g @vue/cli
npm install -g vite
  1. 创建一个新的 Vue 项目:
vue create my-vue-app
  1. 进入项目目录并安装 Vite 插件:
cd my-vue-app
npm install --save-dev vite
  1. 修改 package.json 文件,添加以下脚本:
"scripts": {"dev": "vite","build": "vite build"
}
  1. 创建一个新的 Vue 组件:
<template><div><h1>{{ message }}</h1></div>
</template><script>
export default {data() {return {message: 'Hello, World!'}}
}
</script>
  1. main.js 文件中引入该组件并挂载到 DOM 上:
import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')
  1. 运行项目:
npm run dev
  1. 打开浏览器并访问 http://localhost:3000,即可看到页面上显示的 “Hello, World!”。

使用 Vite 开发 React 应用

  1. 安装 Node.js 和 npm

首先需要安装 Node.js 和 npm,可以在官网下载安装包进行安装。

  1. 创建 React 应用

使用 create-react-app 命令创建 React 应用:

npx create-react-app my-app
  1. 安装 Vite

在项目根目录下执行以下命令安装 Vite:

npm install vite --save-dev
  1. 修改 package.json

在 package.json 文件中添加以下代码:

"scripts": {"start": "vite","build": "vite build"
}
  1. 修改 index.html

将 index.html 文件中的 script 标签修改为以下代码:

<script type="module" src="/src/index.js"></script>
  1. 创建 src/index.js

在 src 目录下创建 index.js 文件,并添加以下代码:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root')
);
  1. 运行应用

执行以下命令启动应用:

npm start
  1. 构建应用

执行以下命令构建应用:

npm run build

Vite 的高级用法

插件开发:Vite 提供了丰富的插件 API,可以通过编写插件来扩展 Vite 的功能,例如添加自定义的文件类型、自定义处理器、自定义中间件等。

自定义配置:Vite 的默认配置已经足够满足大部分项目的需求,但是对于一些特殊的需求,可以通过自定义配置来满足。例如,可以通过配置 alias 来简化模块的引入路径,可以通过配置 optimizeDeps 来优化依赖的打包方式等。

HMR(热更新):Vite 内置了 HMR 功能,可以在开发过程中实现快速的热更新,而不需要刷新整个页面。在开发过程中,只需要修改代码,保存后即可看到修改后的效果,非常方便。

生产环境构建:Vite 不仅可以用于开发环境,还可以用于生产环境构建。在生产环境中,Vite 会自动进行代码压缩、混淆、分割等优化,以提高页面加载速度和性能。

vite 插件开发

  1. 创建一个vite实例:
import { createServer } from 'vite';const server = await createServer({// 配置项
});
  1. 获取vite实例的配置项:
const config = server.config;
  1. 获取vite实例的插件列表:
const plugins = server.plugins;
  1. 注册一个自定义插件:
server.config.plugins.push(myPlugin);
  1. 获取vite实例的中间件列表:
const middlewares = server.middlewares;
  1. 注册一个自定义中间件:
server.middlewares.use(myMiddleware);
  1. 构建项目:
import { build } from 'vite';const result = await build({// 配置项
});

配置别名

  1. 在项目根目录下创建一个vite.config.js文件。
  2. 在该文件中,使用defineConfig函数来定义Vite的配置选项。
  3. 在配置选项中,使用alias属性来配置别名。例如:
import { defineConfig } from 'vite';export default defineConfig({alias: {'@': '/src','components': '/src/components','utils': '/src/utils',},
});

上述代码中,我们定义了三个别名:@代表项目根目录下的/src目录,components代表/src/components目录,utils代表/src/utils目录。

  1. 在代码中使用别名。例如:
import MyComponent from '@/components/MyComponent';
import { formatDate } from 'utils/dateUtils';

上述代码中,我们使用了@别名来代表/src目录,使用components别名来代表/src/components目录,使用utils别名来代表/src/utils目录。

相关文章:

Vite 使用学习指南

Vite 的基本概念和特点 Vite 是什么&#xff0c;它的主要特点是什么 Vite 是一个基于 ES modules 的前端构建工具&#xff0c;它的主要特点包括&#xff1a; 快速的冷启动&#xff1a;Vite 采用了基于浏览器原生 ES 模块的开发模式&#xff0c;可以在开发时快速启动应用&…...

【算法训练(day6)】双指针模板

一.双指针算法的由来和使用场景 通常情况下我们可能会遇到在某些可遍历的集合中寻找满足某种性质的字串或元素。这时候我们采取暴力的思路就会面临多重循环。我们可以利用题目中所给的集合并利用其性质将多重循环降成一重循环。光用语言描述可能不太好理解。接下来看几个双指针…...

免费常用的API接口大全

免费常用的API接口大全 OPEN AI &#xff1a; ChatGPT 能够模拟人类的语言行为&#xff0c;与用户进行自然的交互。ChatGPT 可以用于处理多种类型的对话&#xff0c;包括对话机器人、问答系统和客服机器人等。它还可以用于各种自然语言处理任务&#xff0c;比如文本摘要、情感分…...

【HTML】第 2 节 - HTML 标签

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、标题标签 3、段落标签 4、文本格式化标签 5、图像标签 5.1、基本作用 5.2、属性 6、超链接标签 7、音频标…...

MATLAB算法实战应用案例精讲-【数模应用】残差检验(附Java、python和MATLAB代码)

目录 几个高频面试题目 线性回归残差是否一定满足正态分布? 一般情况 特殊情况...

初学Qt(Day03)

今天概览 今天的目标是写一个动态的彩虹灯 一开始是有思路的。只是写的过程中有太多小bug了&#xff0c;真的是防不胜防 我的思路是&#xff1a; 主界面是一个开始界面&#xff0c;点击开始按钮之后&#xff0c;有一个子界面出现&#xff0c;显示出彩虹灯转动的效果。 内部的执…...

皮卡丘xss之htmlspecialchars、xss之href输出、xss之js输出

1.xss之htmlspecialchars htmlspecialchars()函数的功能如下&#xff1a; htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。 预定义的字符是&#xff1a; &#xff08;1&#xff09;& &#xff08;和号&#xff09;成为 &amp; &#xff08;2&#xff09;…...

ArrayList和LinkedList的区别

ArrayList和Vector使用了数组的实现&#xff0c;可以认为ArrayList或者Vector封装了对内部数组的操作&#xff0c;比如向数组中添加&#xff0c;删除&#xff0c;插入新的元素或者数据的扩展和重定向。 LinkedList使用了循环双向链表数据结构。与基于数组ArrayList相比&#xf…...

记录 vue3 webpack 使用 iframe 遇到的坑

需求 我尝试用Vue3写一个自己的主页&#xff0c;把常用的功能集中到主页中&#xff0c;如下图 后发现一个好玩的东西&#xff0c;js实现的在网页底部出现鱼和波浪&#xff0c;如下图&#xff0c;就像想也放到自己的主页中&#xff0c;搜索后发现可以在Vue中用iframe标签直接引…...

华为OD机试真题 Java 实现【去除多余空格】【2023Q1 100分】

一、题目描述 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。 条件约束: 不考虑关键词起始和结束位置为空格的场景;单词的的开始和结束下标保证涵盖一个完整的单词,即一个坐标对开始和结束…...

SAP-MM 条件类型字段解析

01、“定价类型”&#xff1a;定义此条件类型的代码和描述&#xff0c;代码不能重复&#xff0c;描述可更改&#xff0c;根据实际需要&#xff0c;条件类型可定制&#xff1b; 02、“存取顺序”&#xff1a;表示此条件类型在定价时&#xff0c;要到存取顺序号定义的条件表中读…...

C#,码海拾贝(28)——求解“对称正定方程组”的“平方根法”之C#源代码

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…...

碳纤维单丝外径测试中的纳米分辨率激光衍射法解决方案

摘要&#xff1a;碳纤维单丝热膨胀系数是碳纤维复合材料设计、生产与可靠性和寿命评估的重要参数&#xff0c;本文针对单丝径向高温热膨胀系数测试这一难题提出了相应的解决方案。解决方案的核心内容是基于激光衍射法和高温辐射加热&#xff0c;并采用衍射轮廓拟合技术以及相应…...

服务(第三十二篇)nginx做缓存服务器

nginx作为缓存服务配置语法 1、proxy_cache_path 配置语法&#xff08;即缓存路径配置语法&#xff09; Syntax&#xff1a;proxy_cache_path path [levelslevels] [use_temp_pathon|off] keys_zonename:size [inactivetime] [max_sizesize] [manager_filesnumber] [manager_s…...

Java 集合、数组、字符串的相互转换(关于list.toArray(new String[0])的源码分析)

在 Java 中&#xff0c;可以通过以下方式实现集合、数组和字符串之间的相互转换。 一、集合和数组的相互转化 ①、将集合转为数组&#xff1a;&#xff08;toArray 方法&#xff09; List<String> list new ArrayList<>(); list.add("apple"); lis…...

Redis的全局命令及相关误区

Redis中所说的数据结构是针对key-value中的value而言的。主要的结构包括String、哈希表、列表、集合等等在redis中存在16个库&#xff0c;涉及到后期的集群搭建只能使用0号库最为方便 查看所有键&#xff08;支持通配符&#xff09; keys * keys S*返回当前数据库中的键总数 …...

C++核心编程—类和对象,类的三大特性——封装、继承、多态

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.类和对象的概念①什么是对象&#xff1f;②抽象和类1.类的基本概念2.类的声明与定义&#xff1a;3.对象的创建与使用 二.类的封装①为什么有封…...

keep-alive 是 Vue 内置的一个组件,被用来缓存组件实例。

文章目录 简介注意点使用 keep-alive 有以下优缺点优点缺点 简介 keep-alive 是 Vue 内置的一个组件&#xff0c;被用来缓存组件实例。 使用 keep-alive 包裹动态组件时&#xff0c;被包裹的组件实例将会被缓存起来&#xff0c;而不会被销毁&#xff0c;直到 keep-alive 组件…...

(八)Spring之IOC控制反转、DI依赖注入介绍和使用(详解)

文章目录 前言SpringSpring IOC 简介BeanIOC 概述IOC 本质理解 Spring IOC 应用IOC xml装配IOC 依赖注入IOC Bean的作用域 IoC 自动装配Bean 的自动装配注解实现自动装配 IoC 使用注解开发模拟实现Spring IoC 前言 “Spring”在不同的上下文中表示不同的事物。它可以用来引用 …...

凸缺陷 convexityDefects

获取凸包&#xff0c;可以参考我的这篇文章&#xff1a; 凸包&#xff08;Convex Hull&#xff09;代码实现案例 获取了凸包之后&#xff0c;可以干什么呢&#xff1f; 凸缺陷凸包与轮廓之间的部分称为凸缺陷。凸缺陷可用来处理手势识别等问题。 通常情况下&#xff0c;使用如…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...