Vite入门指南

ops/2025/2/14 5:04:28/

一、什么是Vite?

Vite(法语意为"快速")是由Vue作者尤雨溪开发的新型前端构建工具。它基于原生ES模块(ESM)实现,具有以下核心优势:

  • 极速启动:冷启动时间比Webpack快10-100倍
  • 闪电般的热更新:HMR(热模块替换)保持应用状态
  • 开箱即用的支持:TypeScript、JSX、CSS预处理等
  • 灵活的扩展:通过插件支持Rollup生态系统

二、环境准备

确保已安装:

  • Node.js 14.18+ / 16+
  • npm 7+ 或 yarn
# 验证安装
node -v
npm -v

三、创建第一个项目

1. 初始化项目

npm create vite@latest my-vite-app

选择框架模板(这里以React+TS为例):

✔ Select a framework: › React
✔ Select a variant: › TypeScript

2. 项目结构

my-vite-app/
├── node_modules/
├── public/
│   └── vite.svg
├── src/
│   ├── assets/
│   ├── App.css
│   ├── App.tsx
│   ├── index.css
│   ├── main.tsx
│   └── vite-env.d.ts
├── index.html
├── package.json
├── tsconfig.json
└── vite.config.ts

3. 启动开发服务器

cd my-vite-app
npm install
npm run dev

访问 http://localhost:5173

四、核心功能实践

1. 模块热替换(HMR)

修改 src/App.tsx

function App() {return (<div className="App"><h1>Hello Vite!</h1><p>Edit and save to see HMR in action</p></div>)
}

保存后浏览器立即更新,无需刷新页面

2. CSS处理

创建 src/Button.module.css

.primary {background: #646cff;color: white;padding: 12px 24px;border-radius: 4px;
}

在组件中使用:

import styles from './Button.module.css'function Button() {return <button className={styles.primary}>Click Me</button>
}

3. 静态资源处理

// 直接引入图片
import logo from './assets/react.svg'function Logo() {return <img src={logo} alt="React logo" />
}

五、Vite配置详解

修改 vite.config.ts

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'export default defineConfig({plugins: [react()],server: {port: 3000,open: true},build: {outDir: 'dist',assetsDir: 'static'}
})

六、插件系统

1. 常用插件示例

安装官方React插件:

npm install @vitejs/plugin-react -D

配置插件:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'export default defineConfig({plugins: [react({babel: {plugins: ['babel-plugin-styled-components']}})]
})

2. 社区插件示例(以SVG转换为例)

npm install vite-plugin-svgr -D

配置:

import svgr from 'vite-plugin-svgr'export default defineConfig({plugins: [svgr({svgrOptions: {icon: true}})]
})

使用SVG组件:

import { ReactComponent as Logo } from './logo.svg'function App() {return <Logo />
}

七、生产构建

npm run build

生成优化后的静态文件:

dist/
├── static/
│   ├── js/
│   ├── css/
│   └── assets/
└── index.html

八、环境变量

1. 创建环境文件

.env                # 所有情况
.env.local          # 本地覆盖,git忽略
.env.development    # 开发环境
.env.production     # 生产环境

2. 定义变量(前缀必须为VITE_)

VITE_API_URL=https://api.example.com

3. 使用变量

console.log(import.meta.env.VITE_API_URL)

九、与Webpack的主要差异

特性ViteWebpack
启动时间毫秒级随着项目增长变慢
构建方式ESM原生模块Bundle打包
HMR速度保持状态快速更新需要重建模块
配置复杂度简单相对复杂
生态快速成长成熟

十、完整示例代码

查看GitHub仓库:

git clone https://github.com/vitejs/vite-template-react.git

十一、最佳实践

  1. 按需加载:使用动态import实现代码分割
  2. 缓存策略:配置合理的hash文件名
  3. 性能优化:使用 vite-plugin-compression 进行Gzip压缩
  4. 类型安全:充分利用TypeScript类型检查
  5. SSR支持:结合vite-ssr插件实现服务端渲染

http://www.ppmy.cn/ops/158218.html

相关文章

机器学习数学基础:22.对称矩阵的对角化

一、核心概念详解 &#xff08;一&#xff09;内积 定义与公式&#xff1a;在 n n n维向量空间中&#xff0c;对于向量 x ⃗ ( x 1 , x 2 , ⋯ , x n ) \vec{x}\ (x_1,x_2,\cdots,x_n) x (x1​,x2​,⋯,xn​)和 y ⃗ ( y 1 , y 2 , ⋯ , y n ) \vec{y}\ (y_1,y_2,\cdots,y_…

DeepSeek学习笔记之——DeepSeek-R1论文(英中对照)

《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》 (用的google翻译&#xff0c;凑和能看~~~&#xff0c;共22页&#xff0c;第17页起为贡献&致谢) P1: P2: P3: P4: P5: P6: P7: P8: P9: P10: P11: P12: P13: P14: P15: P16: P17…

用户体验UP!响应式网页设计的CSS魔法

响应式设计需要结合多种技术手段&#xff0c;核心在于&#xff1a; 内容流动性的保持设备特性的适配性能优化的平衡渐进增强的策略 一、核心响应式技术 1. 媒体查询&#xff08;Media Queries&#xff09; 视口分段管理&#xff1a; /* 移动端优先&#xff08;默认样式&am…

代码实践——准备阶段

使用Windows11进行部署项目&#xff0c;使用anaconda、git bash和pycharm部署&#xff0c;全面配置环境磕磕绊绊&#xff0c;虽然最后都通过gpt老师解决了&#xff0c;在运行wenet代码到第四步的时候&#xff0c;deepspeed库怎么都安装不上&#xff0c;查阅很多资料发现&#x…

数智百问 | 制造企业如何降低产线检测数据的存储和管理成本?

在《“十四五”智能制造发展规划》等政策的推动下&#xff0c;以及新能源汽车、消费电子等品牌商对产品质量和供应商智能化水平要求的提升&#xff0c;半导体、电子制造、动力电池等先进制造行业企业纷纷推进产线智能化升级&#xff0c;并投入大量机器视觉检测设备以实现自动化…

传统CV到深度学习:特征工程与卷积神经网络实战(进阶篇)

摘要&#xff1a;本文深入解析传统计算机视觉特征工程核心算法&#xff0c;并手把手实现首个卷积神经网络。通过OpenCVSIFT项目与PyTorch实战案例&#xff0c;揭示深度学习如何颠覆传统视觉算法&#xff0c;提供完整可运行的工业级代码。 一、传统特征工程的巅峰&#xff1a;S…

Linux TCP 编程详解与实例

一、引言 在网络编程的领域中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09;协议因其可靠的数据传输特性而被广泛应用。在 Linux 环境下&#xff0c;使用 C 或 C 进行 TCP 编程可以实现各种强大的网络应用。本文将深入探讨 Linux TCP 编程的各个方面&…

Flutter_学习记录_安装第三方包(演示安装 Intl 包)

打开pubspec.yaml目录找到dependencies位置&#xff0c;如下&#xff1a; 添加需要安装的第三方包 以及 版本号在控制台的OUTPUT中&#xff0c;选择“flutter”结束