vue3+vite+nginx打包
在开发环境下,已经可以正常地运行一个有增删改查功能的页面了,但如何把它发布到运行服务器呢?仍有许多的问题需要探索。
网上很多文章给了很大的帮助,但总是没有说明原理,对于像我这样的初学者来说,不知其所以然,也就不能根据自己的情况加以变通,现在总算是基本走通了,就总结一下,供初学者参考:
1.在开发环境下,通过npm run dev就能启动网页服务,通过配置vite.config.ts就能实现ajax跨域访问,这些都正常了,但在实际部署时,总要把它部署到一个服务器才行。
服务器:一般是用nginx,iis应该也是可以的,但没有深入测试,总之是要先运行npm run build来编译项目,将typescript转为javascript,生成的文件在项目目录\dist目录下。如果不编译成javascript,nginx是不能直接运行typescript的(或者需要额外的配置)。
2.在编译后,将dist目录下的文件复制到nginx目录下,再配置了nginx\conf\nginx.conf,仍会有很多错误,可以参考这篇文章:
vite+vue3打包后部署nginx Failed to load module script,空白页,404,反向代理等问题。_vite加上nginx进行反向代理-CSDN博客
其中我最关心的是ajax的跨域问题,其实要解决的核心问题就是2个:
1、写在页面里的ajax url,如何在打包后,变成正确的地址?
2、访问地址正确了,nginx如何把它映射到后端api接口?
对于问题1:
网上文章很多,其实就是要定义一个公共变量,在ajax地址中拼接这个公共变量,且这个变量要分成开发环境和部署环境2个。
这个如果自己写一套机制也可以,或者就采用现成的vite的框架,建立2个配置文件:

vite在开发环境或部署环境,会分别采用这2个文件中的一个。
这个是开发环境下的文件,里面是开发环境的ajax地址。
一般网上都是用http://localhost:xxxx/ajax,我有意把ajax写成vue,以便观察后续配置哪些地方要做相应关联:

这个是vite.config.ts的配置,上面写的是vue,这里也要写vue

项目target:'http://localhost:8200/'是后端api接口地址,用于接收ajax请求
这个是部署环境的地址,

8090是在nginx配置文件配置的:

注意看红框中的,它是nginx配置的反向代理,就是通过这个来找到后台ajax服务的。
总结:在开发环境下是通过vite.config.ts来实现ajax跨域;而部署环境下是通过nginx的反向代理来实现的。这样就解决了问题2。
再接着说定义的2个变量如何使用?网上文章一般是创建一个request文件,在里面再定义一个service或其他什么名称的axios封装类,这个类的baseURL引用之前2个配置文件中定义的VITE_API_BASE_URL,这无疑是非常好的一个构想,但对于我来说,代码要重构了,之前的访问方式都是直接写成
axios.post( '/api/values/Options',null).then((res)=>{
......这样的,而且我只是想先测通,就不做大改了,直接引用这个变量:

然后再运行npm run build,部署,数据可以正常获取
其它的坑:
1.修改nginx后,不生效,甚至关闭后仍然可以打开网页。这个是因为用start_server.bat启动,它的nginx.exe在关闭后,进程却还在后台运行。需要手工在进程管理器里关掉。我是直接重启服务器的。建议改成start nginx命令,它关闭命令窗口后就真的关闭进程了。
2.直接输入地址不能访问,可以通过以下配置来解决

相关文章:
vue3+vite+nginx打包
在开发环境下,已经可以正常地运行一个有增删改查功能的页面了,但如何把它发布到运行服务器呢?仍有许多的问题需要探索。 网上很多文章给了很大的帮助,但总是没有说明原理,对于像我这样的初学者来说,不知其…...
爬虫与反爬虫实现全流程
我选取的网页爬取的是ppt nba版 需要的工具:pycharm,浏览器 爬虫需要观察它的网页信息,然后开始首先爬取它的html,可以看到有人气,标题,日期,咨询 可以看到用get方法 import requests url"https://img-home.csdnimg.cn/images/20230724024159.png?origin_urlhttps%3A%2…...
Kimi进行学术方向选择精讲!
目录 1.文献搜索 2.辅助选题 3.选题判断 在我们之前的文章中,小编都强调了选题在文章价值中的核心作用。一篇优秀的文章背后,肯定有一个精心挑选的选题。选题的好坏直接影响着文章能够发表的期刊等级。许多宝子们却采取了相反的做法,将大量…...
湖北产教融合教育研究院重庆分院揭牌成立
百年大计,教育为本。为积极响应重庆市人才培养的迫切需求,充分发挥中国同等学力申硕综合服务领航者的专业优势,12月26日,湖北产教融合教育研究院重庆分院启动仪式在渝北区龙山一路278号祈年悦城4栋24层隆重举行。 湖北产教融合教育…...
探索CSS Houdini:下一代样式与动画技术
随着前端开发对用户体验的要求不断提高,传统的CSS在某些场景下难以满足开发者的高阶需求。在这种背景下,CSS Houdini 技术应运而生,为开发者提供了更高自由度和更强大的功能,开创了现代Web动画与样式的新可能。 什么是CSS Houdin…...
winserver搭建域环境
域环境的搭建 7.1理论知识 Windows Server 2008网络类型 工作组(Work Group) 在安装Windows系统的时候 ,工作组名一般为“workgroup”,也可以任意起个名字,在同一工作组或不同工作组在访问时也没有什么分别,在使用时&a…...
鸿蒙开发工程师成长的五个阶段
在科技日新月异的今天,鸿蒙(HarmonyOS)作为华为自主研发的操作系统,正以其独特的魅力和广阔的应用前景吸引着越来越多的开发者加入。鸿蒙不仅承载着华为对未来智能设备互联互通的愿景,也为开发者提供了一个充满挑战与机…...
Redis集成到SpingBoot 的数据结构常见操作
一.环境配置 1.依赖注入 2.yaml文件配置 3.启动本地Redis服务 (或在虚拟机上启动,这里为了方便演示在本地启动) 4.启动成功案例 5.创建一个Controller我们开始演示 RestController public class MyController {Autowiredprivate StringRedisTemplate redisTemplate;} 二 …...
输入输出(I/O):熟悉 Java 的 I/O 类库,尤其是 NIO 和文件操作
输入输出(I/O):熟悉 Java 的 I/O 类库,尤其是 NIO 和文件操作 在 Java 中,I/O(输入输出)操作是开发中非常重要的一部分,用于与文件、网络和其他数据流交互。Java 提供了传统的 I/O&…...
mysql建立主从集群
mysql建立主从集群需要多个mysql服务器,主从数据库是通过log日志来进行同步的,所以需开启log-bin。本地安装多个mysql参考底部 主数据库配置 打开主数据库my.ini配置文件,给其配置server_id1 [mysqld] port3306 basedirD:/phpstudy_pro/1/…...
Python AI 教程之四:无监督学习
什么是无监督学习? 无监督学习是机器学习的一个分支,用于处理未标记的数据。与监督学习(其中数据被标记为特定类别或结果)不同,无监督学习算法的任务是在不了解数据含义的情况下寻找数据中的模式和关系。这使得无监督学习成为探索性数据分析的强大工具,其目标是了解数据…...
ReactiveStreams、Reactor、SpringWebFlux
注意: 本文内容于 2024-12-28 21:22:12 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:ReactiveStreams、Reactor、SpringWebFlux。感谢您的关注与支持! ReactiveStreams是…...
Qt 的信号槽机制详解:之信号槽引发的 Segmentation Fault 问题拆析(下)
Qt 的信号槽机制详解:之信号槽引发的 Segmentation Fault 问题拆析(下) 前言一. 信号槽的误用导致崩溃的常见原因1.信号和槽连接的对象被提前释放案例解决方法 2.参数类型不匹配案例解决方法 3. 多线程信号槽使用不当案例解决方法 4. 信号重复…...
opencv(cpp) Mat使用总结
opencv访问矩阵的通道数 #include <opencv2/opencv.hpp> #include <iostream>int main() {// 创建一个3通道的彩色图像(例如,BGR格式)cv::Mat colorImage cv::Mat::zeros(100, 100, CV_8UC3);// 创建一个单通道的灰度图像cv::M…...
【Hackthebox 中英 Write-Up】Web Request | 分析 HTTP 请求和响应
欢迎来到我的writeup分享!我希望大家不要只关注结果或答案,而是通过耐心阅读,尝试逆向工程理解背后的运作原理。在这里,你不仅能找到解题的思路,还能学到更多与Hack The Box等平台相关的技术和技巧,期待与你…...
c#多线程之生产者-消费者模型
在 C# 中实现 生产者-消费者模式,通常需要多个线程来处理数据的生产和消费。我们可以使用 Queue<T> 来作为存储数据的队列,并使用 Thread、Mutex 或 Monitor 来确保线程安全。BlockingCollection<T> 是 C# 提供的一个线程安全的集合…...
Spring Boot中幂等性的应用
在 Spring Boot 中,幂等性是实现分布式系统设计和接口调用的一个重要概念,尤其在高并发、分布式环境下,确保接口重复调用不会引发系统数据异常至关重要。 幂等性概念 幂等性(Idempotence)是指一次请求和重复多次请求…...
【机器学习】分类
文章目录 1. 能否用回归解决分类问题2. 生成模型(概率生成)3. 判别模型(逻辑回归)4. 多分类问题 1. 能否用回归解决分类问题 二元分类 数据分布不规律,回归函数会尽量减少误差,导致不合理的偏移离分界较远…...
5.若依的角色权限控制
RBAC 基于角色的访问控制,通过角色来分配和管理用户的菜单权限。 修改课程管理的菜单到主类目下 新建角色并分配菜单 新建用户并分配角色 添加一个根菜单,父级为主类目...
Lumos学习王佩丰Excel第二十三讲:饼图美化与PPT图表
一、双坐标柱形图的补充知识 1、主次坐标设置 2、主次坐标柱形避让(通过增加两个系列,挤压使得两个柱形挨在一起) 增加两个系列 将一个系列设置成主坐标轴,另一个设成次坐标轴 调整系列位置 二、饼图美化 1、饼图美化常见设置 …...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
