Vite:下一代前端开发工具的崛起

文章目录

    • 前言
    • 一、Vite 简介
    • 二、Vite 的核心特点
    • 三、安装 Vite
    • 四、创建项目
    • 五、配置 Vite
    • 六、开发模式下的热更新
    • 七、生产构建
    • 八、插件系统
    • 九、性能优化
    • 十、社区和支持
    • 结语


前言

在现代前端开发中,构建工具的选择直接影响到开发效率和项目维护的成本。传统的构建工具如 Webpack 虽然功能强大,但在项目启动和热更新方面的表现却常常不尽人意。为了应对这些问题,Vue.js 作者尤雨溪推出了新一代前端构建工具 Vite。Vite 通过利用现代浏览器的原生 ES 模块导入(ESM)机制,提供了更快的冷启动速度和高效的模块热更新功能,极大地提升了开发体验。本文将详细介绍 Vite 的核心特点、安装配置方法以及如何利用 Vite 进行快速开发。


一、Vite 简介

Vite 是一个由 Vue.js 作者尤雨溪开发的新一代前端构建工具。它的名字来源于法语单词 “vit”,意为“快”。Vite 的主要目标是提供更快的开发体验,特别是在项目启动和模块热更新方面。Vite 利用了现代浏览器支持的原生 ES 模块导入(ESM)机制,使得开发者可以立即开始编码而无需等待长时间的构建过程。

二、Vite 的核心特点

1. 快速冷启动

传统的构建工具如 Webpack 在启动时需要对整个项目进行预编译,这通常会导致较长的启动时间。而 Vite 使用浏览器内置的 ESM 加载机制,在启动时不需要进行任何预编译步骤。这意味着开发者可以在几秒钟内看到他们的应用运行起来,极大地提高了开发效率。

2. 按需编译

Vite 只在实际请求到某个模块时才对其进行编译。这种方式不仅减少了初次加载的时间,还降低了内存消耗。这对于大型项目尤其重要,因为传统的全量编译可能会导致开发环境变得非常缓慢。

3. 高效的热更新

Vite 支持高效的模块热更新(HMR),能够实现代码更改后的即时反馈。当文件发生变化时,Vite 能够智能地只重新加载受影响的模块,而不是整个页面或组件树,从而保持应用状态不变,提高开发者的调试效率。

三、安装 Vite

要开始使用 Vite,首先需要确保你的计算机上已经安装了 Node.js。然后,可以通过 npm 或 yarn 全局安装 Vite:

npm install -g create-vite

或者

yarn global add create-vite

安装完成后,你可以通过 create-vite 命令来创建一个新的 Vite 项目:

npx create-vite my-vite-app

这将引导你选择项目类型,例如纯 JavaScript/TypeScript、React、Vue 等。选择完后,按照提示完成项目的初始化。

四、创建项目

假设我们选择创建一个 Vue 项目,以下是详细的步骤:

  1. 创建项目
    npx create-vite my-vite-app --template vue
    
  2. 进入项目目录
    cd my-vite-app
    
  3. 安装依赖
    npm install
    
    或者
    yarn
    

五、配置 Vite

Vite 的配置非常简单,默认情况下,你可能不需要做太多配置就可以开始开发。但是,如果你有特定的需求,比如需要配置代理服务器、添加自定义插件等,可以在项目根目录下创建或编辑 vite.config.js 文件。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' // 如果你使用的是 Vueexport default defineConfig({plugins: [vue()], // 注册插件server: {port: 3000, // 设置开发服务器端口open: true, // 启动时自动打开浏览器proxy: {'/api': 'http://localhost:5000' // 配置代理服务器}}build: {outDir: 'dist', // 构建输出目录rollupOptions: {// 自定义 Rollup 配置input: 'src/main.js'}}resolve: {alias: {'@': '/src', // 设置别名}}
})

六、开发模式下的热更新

启动开发服务器非常简单,只需在项目根目录下运行:

npm run dev

或者

yarn dev

这将启动一个本地开发服务器,并开启热更新功能。当你修改源代码文件时,Vite 会自动检测到这些变化并仅重新加载必要的部分,保持应用程序的状态不变。这种即时反馈机制对于快速迭代和调试来说是非常宝贵的。

热更新工作原理

  • 文件监听:Vite 会在开发模式下监听文件的变化。
  • 模块图:Vite 维护一个模块依赖图,记录每个模块的依赖关系。
  • 增量更新:当文件发生变化时,Vite 会根据模块图找到受影响的模块,并重新编译这些模块。
  • 客户端注入:Vite 在客户端注入一个 HMR 客户端脚本,该脚本负责接收服务器发送的更新指令,并重新加载相应的模块。

七、生产构建

当你准备好部署应用时,可以使用以下命令来构建生产版本:

npm run build

或者

yarn build

构建过程会根据你在 vite.config.js 中的配置来优化和打包你的应用,生成的文件会被放置在指定的输出目录中,通常是 dist 文件夹。

构建优化

  • Tree Shaking:Vite 使用 Rollup 进行构建,Rollup 支持 Tree Shaking,可以消除未使用的代码,减小最终包的体积。
  • Code Splitting:Vite 会自动进行代码分割,将不同路由和懒加载组件的代码分别打包,减少初始加载时间。
  • Minification:构建过程中会对代码进行压缩,减小文件大小,提高加载速度。

八、插件系统

Vite 的插件系统非常灵活,允许开发者扩展和定制构建流程。Vite 插件可以用于各种任务,如代码转换、资源处理、环境变量管理等。

安装插件

你可以通过 npmyarn 安装 Vite 插件,然后在 vite.config.js 中注册它们。例如,安装并使用 vite-plugin-eslint 插件:

npm install vite-plugin-eslint --save-dev

或者

yarn add vite-plugin-eslint --dev

然后在 vite.config.js 中注册插件:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import eslintPlugin from 'vite-plugin-eslint'export default defineConfig({plugins: [vue(),eslintPlugin() // 注册 ESLint 插件]// 其他配置项
})

九、性能优化

虽然 Vite 已经非常快,但在某些情况下,你仍然可以通过一些技巧进一步优化性能。

缓存策略

  • HTTP 缓存:通过设置合适的 HTTP 缓存头,可以减少重复请求,提高加载速度。
  • 服务端缓存:如果使用代理服务器,可以配置服务端缓存来减少数据库查询等操作。

代码分割

  • 动态导入:使用动态导入(import())来按需加载代码,减少初始加载时间。
  • 路由懒加载:在路由配置中使用懒加载,确保只有用户访问的路由才会被加载。

图片和资源优化

  • 图片压缩:使用工具如 imagemin 对图片进行压缩,减小文件大小。
  • 懒加载:对于图片和其他资源,使用懒加载技术,只在用户滚动到相应位置时才加载。

十、社区和支持

  • 官方文档:Vite 的官方文档提供了详细的指南和 API 文档。
    • 查看官方文档
  • GitHub:Vite 的 GitHub 仓库是报告问题和提交 PR 的地方。
    • 访问 GitHub 仓库
  • Discord:Vite 的 Discord 服务器是一个交流和讨论的好地方。
    • 加入 Discord 社区
  • Stack Overflow:在 Stack Overflow 上搜索 Vite 相关的问题,或者提问以获得帮助。
    • 查看 Stack Overflow

结语

Vite 不仅仅是另一个构建工具;它代表了一种新的开发方式,即通过利用现代浏览器的能力来加速开发流程。无论是新手还是经验丰富的开发者,都能从 Vite 的高效性和灵活性中受益。随着 Vite 社区的不断增长,我们可以期待更多强大的插件和工具的出现,为前端开发带来更多的可能性。

通过本文的介绍,希望你能够对 Vite 有一个全面的了解,并能够在实际项目中充分利用其优势,提高开发效率和用户体验。

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

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

相关文章

Chrome 浏览器 131 版本开发者工具(DevTools)更新内容

Chrome 浏览器 131 版本开发者工具(DevTools)更新内容 一、使用 Gemini 调试 CSS Chrome DevTools 现在推出了一个新的实验性 AI 辅助面板,可以与 Gemini 聊天并获得帮助来调试 CSS。 在 Elements 面板中,右键点击一个元素并选…

Ubuntu20.04 Rk3588 交叉编译ffmpeg7.0

firefly 公司出的rk3588的设备,其中已经安装了gcc 交叉编译工具,系统版本是Ubuntu20.04。 使用Ubuntu20.04 交叉编译ffmpeg_ubuntu下配置ffmpeg交叉编译器为arm-linux-gnueabihf-gcc-CSDN博客文章浏览阅读541次。ubuntu20.04 交叉编译ffmpeg_ubuntu下配…

蓝桥杯第22场小白入门赛2~5题

这场比赛开打第二题就理解错意思了,还以为只能用3个消除和5个消除其中一种呢,结果就是死活a不过去,第三题根本读不懂题意,这蓝桥杯的题面我只能说出的是一言难尽啊。。第四题写出来一点但是后来知道是错了,不会正解&am…

sagemaker中使用pytorch框架的DLC训练和部署cifar图像分类任务

参考资料 https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-python-sdk/pytorch_cnn_cifar10/pytorch_local_mode_cifar10.ipynbhttps://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html 获取训练数据 # s3://zhaojiew-sa…

golang笔记8-函数

1. 基本函数 package mainimport "fmt"/*什么是函数:完成某一功能的程序指令的集合语法:func 函数名称(形参列表)(返回值类型列表){执行语句。。。返回值列表}注意事项:函数名:函数名首字母大写:可以被本包…

vite+vue3+ts编译vue组件后,编译产物中d.ts文件为空

一、前言 使用vue3vitets实现一个UI组件库,为了生成类型文件便于其他项目引用该组件库。根据推荐使用了vite-plugin-dts插件进行ts文件的生成 二、版本 组件版本vue ^3.5.12 vite ^5.4.10 vite-plugin-dts ^4.3.0 typescript ~5.6.2 三、问题描述 使用vitevi…

向量数据库FAISS之二:基础进阶版

基础 1.评价类型和距离 1.METRIC_L2 Faiss 使用了欧几里得 (L2) 距离的平方,避免了平方根。 这仍然与欧几里德距离一样单调,但如果需要精确距离,则需要结果的额外平方根。 2.METRIC_INNER_PRODUCT 这通常用于推荐系统中的最大内积搜索。…

家庭网络常识:猫与路由器

这张图大家应该不陌生——以前家庭网络的连接方式。 图1 家庭网络连接示意图 来说说猫/光猫: 先看看两者的图片。 图2 猫 图3 光猫 这个东西因为英文叫“modem”,类似中文的“猫”,所以简称“猫”。 猫和光猫的区别就是,一…

华三预赛学习笔记(每日编辑,复习完为止)

知识点分布 路由交换技术基础 计算机网络基本概念 计算机网络基本概念: 很多电脑和设备通过电线或无线信号连在一起,可以互相“说话”和“分享东西” 网络的主要形式和发展历程: 诞生阶段-最早的计算机网络是以单个计算机为中心的联机系统-终…

技术速递|Microsoft.Extensions.VectorData 预览版简介

作者:Luis Quintanilla - 项目经理 排版:Alan Wang 我们很高兴推出 Microsoft.Extensions.VectorData.Abstractions 库,该库现已提供预览版。 正如 Microsoft.Extensions.AI 库为使用 AI 服务提供了一个统一层一样,此包为 .NET 生…

第5章-总体设计 5.3 硬件架构设计

5.3 硬件架构设计 1.哪些类型的产品需要架构设计?2.硬件架构师到底做什么?(1)理解需求和业务模型的情况。(2)背板设计,既需要考虑业务数据交换能力,也需要考虑子模块的管理监控能力。…

图像/文字差异类型验证码识别 无需训练

某像差异在个别全家桶验证方便有使用,对于这种验证码类型如下: 首先还是目标检测,直接用 dddd 自带的detection 就足够了。 特征提取 其次经过观察,差异答案与其他三个无非就是颜色,字体,方向&#xff0c…

新华三H3CNE网络工程师认证—生成树协议

新华三H3CNE网络工程师认证本节讲解生成树协议,关于生成树协议,提到生成树协议,这个时候不得不提到另外一个概念叫二层环路。二层环路导致的原因是交换机的转发机制导致的,本博客将分析这个机制导致这个问题的原因。 文章目录 一…

使用ai工具探究论文的工作流(阅读一个EEG的cnn-lstm文献(2021))

文章目录 李沐老师的方法论第一遍:做海选第二遍:对相关论文进行精选第三遍:重点研读 AI是怎么分析一个文章的标题(Title)和关键词摘要(Abstract)分析引言(Introduction)梳…

Scala的Array习题

答案:CBBBB import scala.collection.mutable.ArrayBuffer //1 case class DreamItem(content:String,var isDone:Boolean,deadline:String,var order:Int) object p5 {def main(args: Array[String]): Unit {//2val dreamListArrayBuffer[DreamItem]()//梦想清单/…

深度学习的实践层面

深度学习的实践层面 设计机器学习应用 在训练神经网络时,超参数选择是一个高度迭代的过程。我们通常从一个初步的模型框架开始,进行编码、运行和测试,通过不断调整优化模型。 数据集一般划分为三部分:训练集、验证集和测试集。常…

TPU-MLIR 总览

TPU-MLIR 总览 💡深度学习编译器可以实现一次性代码开发和重用各种计算能力处理器的目标 ## 项目简介: TPU-MLIR 是 AI 芯片的 TPU 编译器工程。该工程提供了一套完整的工具链, 其可以将不同框架下预训练的神经网络, 转化为可以在算能 TPU 上高效运算的…

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项(启用 strict 后自动包含这些)模块与导入相关选项 2. include 和 excludeinclude…

苹果MacOS 调用自编译opencv的Dylib显示一个图片程序的步骤

前言 为了测试自编译的opencv库是否能在苹果MacOS系统下使用,需要写一个简单的测试程序。这个测试程序写起来不难,麻烦的是一些配置。网上的办法很多,里面因为版本的问题有一些坑。特此写了一个建立步骤,供大家参考。 1、新建一个…

AI赋能:高职院校实验实训教学如何拥抱人工智能浪潮?

随着信息技术的迅猛发展,人工智能技术已成为推动社会各行业转型升级的核心力量。它不仅在提升生产效率、优化管理流程、提高服务质量方面发挥着关键作用,也深刻影响着高职教育的专业发展和课程教学内容的改革。作为培养专业技术技能人才的摇篮&#xff0…