vite.config.js 是Vite 项目的配置文件,分析具体用法

vite.config.js 是 Vite 项目的配置文件,用于定义项目的构建、开发服务器、插件等配置选项。以下是示例代码中各部分的作用分析:

1. 导入模块

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
  • fileURLToPathURL:用于处理文件路径,将基于 URL 的路径转换为本地文件路径。

  • defineConfig:从 Vite 中导入的辅助函数,用于定义配置对象,提供更好的类型提示和代码提示。

  • vue:从 @vitejs/plugin-vue 导入 Vue 插件,用于支持 Vue 文件的解析和处理。

  • vueDevTools:从 vite-plugin-vue-devtools 导入 Vue 开发工具插件,用于在开发过程中提供 Vue 开发工具支持。

2. 配置对象

export default defineConfig({plugins: [vue(),  //通过 vue() 插件,项目可以使用 Vue 3 的单文件组件(SFC)vueDevTools(),  //通过 vueDevTools() 插件,开发者可以在浏览器中使用 Vue 开发工具进行调试。],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))//使用路径别名 @,简化对 src 文件夹下模块的引用},},
})
  • **plugins**:

    • vue():启用 Vue 插件,允许项目中使用 .vue 文件,并支持 Vue 的单文件组件(SFC)。

    • vueDevTools():启用 Vue 开发工具插件,方便在开发过程中调试 Vue 应用。

  • **resolve**:

    • alias:定义路径别名,用于简化路径引用。
      • '@':将路径别名 @ 映射到项目根目录下的 src 文件夹。例如,@/components 实际上指向 src/components

      • fileURLToPath(new URL('./src', import.meta.url)):动态计算 src 文件夹的绝对路径,确保路径的正确性。

路径别名@作用:可以方便引用src文件夹下面的.vue组件

3. vite.config.js 的作用

  • 配置开发服务器
    • 定义开发服务器的行为,例如端口号、代理设置等。

  • 构建配置
    • 定义构建过程中的行为,例如输出目录、代码压缩等。

  • 插件管理
    • 加载和配置插件,扩展 Vite 的功能,例如支持 Vue、React 等框架。

  • 路径别名
    • 定义路径别名,简化模块路径引用,提高代码可读性。

  • 环境变量
    • 通过 process.envloadEnv 加载和使用环境变量,支持不同环境下的配置。

前后端分离项目:

vite.config.js 中配置后端服务器通常是为了在开发过程中实现前端与后端的接口代理,解决开发环境下的跨域问题。Vite 提供了 server.proxy 配置项,用于设置代理规则,将前端请求转发到后端服务器。通过 Vite 的代理功能,解决了开发环境下的跨域问题,并简化了前端与后端的接口对接适用于前后端分离的开发模式。

以下是如何在 vite.config.js 中配置后端服务器的示例和说明:

示例代码

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'export default defineConfig({plugins: [vue()],server: {proxy: {// 配置代理规则'/api': {target: 'http://localhost:3000', // 后端服务器地址changeOrigin: true, // 是否启用跨域rewrite: (path) => path.replace(/^\/api/, '') // 重写路径},'/auth': {target: 'http://localhost:3000',changeOrigin: true}}}
})

配置说明

1. server.proxy

server.proxy 是 Vite 提供的代理配置项,用于将前端开发服务器的请求转发到后端服务器。它是一个对象,键是前端请求的路径前缀,值是一个代理配置对象。

2. 代理配置对象

每个代理规则可以包含以下常用配置项:

  • **target**:后端服务器的地址。target: 'http://localhost:3000'
    这是代理的目标地址,表示后端服务器的 URL。所有匹配 /api 的请求都会被转发到 http://localhost:3000。

  • **changeOrigin**:是否启用跨域。设置为 true 可以避免跨域问题。启用跨域资源共享(CORS)。当设置为 true 时,代理会修改请求的 Origin 头,使其与目标服务器的地址一致。这可以避免浏览器的跨域限制。

  • **rewrite**:可选的路径重写函数。用于修改请求路径,例如去掉路径前缀。前端请求路径为 /api/users,经过重写后,路径变为 /users。

3. 示例解析

在上述示例中:

  • 当前端请求路径以 /api 开头时,Vite 会将请求转发到 http://localhost:3000

  • '/api':
    这是代理规则的键,表示前端请求路径的前缀。当请求路径以 /api 开头时,这条代理规则会被触发。例如:
    前端请求 /api/users 会匹配这条规则。
    前端请求 /api/posts 也会匹配这条规则。

  • 请求路径会通过 rewrite 函数进行处理,去掉 /api 前缀。例如,前端请求 /api/users 会被转发到 http://localhost:3000/users。后端服务器的接口路径是 /users 和 /posts,而不是 /api/users 和 /api/posts。如果不进行路径重写,转发后的请求路径将是 http://localhost:3000/api/users,这显然不符合后端的接口路径设计。通过路径重写,可以确保请求路径与后端接口一致。

  • 如果后端接口路径本身包含 /api 前缀(例如 http://localhost:3000/api/users),则不需要路径重写。

  • /auth 路径的请求同样会被转发到 http://localhost:3000,但没有路径重写。

配置后端服务器的其他注意事项

1. 支持 HTTPS

如果后端服务器使用 HTTPS,需要在 target 中指定完整的 HTTPS 地址,并可能需要配置 secure 属性:

'/api': {target: 'https://example.com',secure: false, // 如果后端证书不是由受信任的 CA 签发,可以设置为 falsechangeOrigin: true
}
2. WebSocket 代理

如果需要代理 WebSocket 请求,可以添加 ws: true 选项。

如果后端服务器使用 WebSocket,可以通过 ws 属性启用 WebSocket 代理:

'/ws': {target: 'ws://localhost:3000',ws: true, // 启用 WebSocket 代理changeOrigin: true
}
3. 多个后端服务

如果项目需要代理到多个后端服务,可以定义多个代理规则:

server: {proxy: {'/api': {target: 'http://localhost:3000',changeOrigin: true},'/admin': {target: 'http://localhost:4000',changeOrigin: true}}
}
4. 环境变量

代理配置也可以通过环境变量动态设置,例如:

import { defineConfig, loadEnv } from 'vite'export default defineConfig(({ mode }) => {const env = loadEnv(mode, process.cwd(), '')return {server: {proxy: {'/api': {target: env.VITE_BACKEND_URL || 'http://localhost:3000',changeOrigin: true}}}}
})

.env 文件中可以设置:

VITE_BACKEND_URL=http://localhost:3000

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

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

相关文章

行为模式---责任链模式

概念 责任链模式是一种行为设置模式,它的核心思想就是将请求的发送者和接收者进行解耦,每个接收者都可以处理请求。 在责任链模式中将每个接收者连成一个链条,当有请求发送上来的时候会经过每一个接收者。直到消息被处理。 适用场景 1、当…

pytest结合allure

Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…

前端知识点---http.createHttp()的理解(arkts)

通俗易懂的例子:点外卖 🍔🥤 想象一下,你在家里点外卖,HTTP 请求就像是你和餐厅之间的沟通方式。 1️⃣ 没有 http.createHttp():每次点餐都重新拨电话 📞 如果你每次点餐都重新拨打餐厅的电话…

大模型开发(五):P-Tuning项目——新零售决策评价系统(下)

P-Tuning项目——新零售决策评价系统(下) 0 前言1 P-Tuning原理2 数据处理 0 前言 上篇文章我们介绍了使用PET方式微调BERT模型,PET属于提示词微调的一种,另一种比较常见的提示词微调是P-Tuning,我们今天在相同的项目…

分布式中间件:Redis介绍

目录 Redis 概述 Redis 的特点 高性能 丰富的数据结构 持久化 分布式特性 简单易用 Redis 的数据结构 字符串(String) 哈希(Hash) 列表(List) 集合(Set) 有序集合&…

在昇腾GPU上部署DeepSeek大模型与OpenWebUI:从零到生产的完整指南

引言 随着国产AI芯片的快速发展,昇腾(Ascend)系列GPU凭借其高性能和兼容性,逐渐成为大模型部署的重要选择。本文将以昇腾300i为例,手把手教你如何部署DeepSeek大模型,并搭配OpenWebUI构建交互式界面。无论…

系统思考—组织诊断

“未经过诊断的行动是盲目的。” — 托马斯爱迪生 最近和一家教育培训机构沟通时,发现他们面临一个有意思的问题:每年招生都挺不错,但教师的整体绩效一直提升缓慢,导致师生之间存在长期的不匹配。管理层试了很多办法,…

AI大模型学习(五): LangChain(四)

Langchian读取数据库 案例:在数据库中表格数据上的问题系统的基本方法,将涵盖使用链和代理的视线,通过查询数据库中的数据并得到自然语言的答案,两者之间的主要区别在于,我们代理可以根据多次循环查询数据库以回答问题 实现思路: 1.将问题转换成DSL查询,模型将用…

人工智能与深度学习的应用案例:从技术原理到实践创新

第一章 引言 人工智能(AI)作为21世纪最具变革性的技术之一,正通过深度学习(Deep Learning)等核心技术推动各行业的智能化进程。从计算机视觉到自然语言处理,从医疗诊断到工业制造,深度学习通过模拟人脑神经网络的层次化学习机制,实现了对复杂数据的高效分析与决策。本…

支持向量机的深度解析:从理论到C++实现

支持向量机(SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。本文详细探讨了SVM的理论基础,包括最大间隔分离超平面、软间隔和核技巧(Kernel Trick)的数学原理,并通过LaTeX公式推导其优化目标。接着,我们用C++实现了一个简单的线性SVM,包括梯度下降优化求解支…

企业如何选择研发项目进度管理软件?盘点15款实用工具

这篇文章介绍了以下工具: 1. PingCode; 2. Worktile; 3. 腾讯 TAPD; 4. 华为 DevCloud; 5. 亿方云; 6. 阿里云效; 7. CODING 码云; 8. 明道云; 9. 进度猫; 10. 轻流等。 …

c++: 容器vector

文章目录 介绍initializer_list与string的不同底层总代码 介绍 C 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。 vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。 与 C 数组相…

Qt常用控件之表格QTableWidget

表格QTableWidget QTableWidget 是一个表格控件,行和列交汇形成的每个单元格,是一个 QTableWidgetItem 对象。 1. QTableWidget属性 QTableWidget 的属性只有两个: 属性说明rowCount当前行的个数。columnCount当前列的个数。 2. QTableW…

Golang学习笔记_47——访问者模式

Golang学习笔记_44——命令模式 Golang学习笔记_45——备忘录模式 Golang学习笔记_46——状态模式 文章目录 一、核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、特点分析三、适用场景1. 编译器实现2. 财务系统3. UI组件系统 四、Go语言实现示例完整实现代码执行结果 五、…

栈概念和结构

文章目录 1. 栈的概念2. 栈的分类3. 栈的实现(数组栈)3.1 接口设计(Stack.h)3.2 接口实现(Stack.c)1)初始化销毁2)栈顶插入删除3)栈顶元素、空栈、大小 3.3 完整代码Stac…

GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程

源码仓库: https://gitcode.com/youlai/vue3-element-admin 后端仓库: https://gitcode.com/youlai/youlai-boot 开源助力,开启中后台快速开发之旅 vue3-element-admin 是一款精心打造的免费开源中后台管理前端模板,它紧密贴合…

算法.习题篇

算法 — 地大复试 模拟 while循环和MOD循环计数 1.约瑟夫问题 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判断当前数组是否一个小孩都没有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…

大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。

大白话JavaScript实现一个函数&#xff0c;将字符串中的每个单词首字母大写。 答题思路 理解需求&#xff1a;要写一个函数&#xff0c;它能接收一个字符串&#xff0c;然后把这个字符串里每个单词的第一个字母变成大写。分解步骤 拆分单词&#xff1a;一般单词之间是用空格隔…

react中如何使用使用react-redux进行数据管理

以上就是react-redux的使用过程&#xff0c;下面我们开始优化部分&#xff1a;当一个组件只有一个render生命周期&#xff0c;那么我们可以改写成一个无状态组件&#xff08;UI组件到无状态组件&#xff0c;性能提升更好&#xff09;

广告营销,会被AI重构吗?

DeepSeek设计&#xff0c;即梦AI绘图&#xff0c;剪映成片。 DeepSeek的热度还在高开疯走。 用户对于各个场景下DS应用的探索也还在持续&#xff0c;各种DS的模式被挖掘出来&#xff0c;超级个体们开始给手下的大模型团队进行分工&#xff0c;实践出各种场景下最佳的排列组合方…