前端项目打包、部署的基础 (vue)

详细请看B站视频 BV19n4y1d7Gr 《禹神:前端项目部署指南,前端项目打包上线》,本博客为自用视频笔记。

目录

  • 项目打包
    • vue打包
    • 打包前分析项目请求
  • 本地服务器部署
    • 问题 & 解决
      • 问题1:刷新页面404问题
      • 问题2:ajax请求废了
  • nginx部署
    • ① 解决刷新页面404问题
    • ② 解决ajax请求废了问题
  • 云服务器部署

实例中的vue项目,使用的 api 是尚硅谷提供的在线 api。

项目打包

  • 我们开发时用的脚手架(比如vue-cli)其实就是一个微型服务器,用于支撑开发环境、运行代理服务器等。
  • 打包完的文件中不存在 .vue .jsx .less等文件,而是 html css js等。
  • 打包后的文件,不再借助脚手架运行,而是需要部署到服务器上运行。
  • 打包前,请务必梳理好前端项目的ajax封装(请求前缀、代理规则等)。

vue打包

vue中npm run build对项目打包,打包后会新生成一个dist文件,直接打开是空白的,需要放到服务器上才能运行。
有本地服务器部署、nginx服务器部署、云服务器部署三种方式。

打包前分析项目请求

怎么分析?随便找一个组件,分析其最后请求是怎么发送出去的。
也许会有二次封装的axios(拦截器)、baseURL

  • 分析

浏览器发送请求的时候一定是一个完整的URL(协议+主机+端口号+路由),如果没有说明协议+主机+端口号,会自动看你的所属位置(比如vue项目运行时的所属位置是http://www.localhost:8080)。因此在发送请求的时候如果没有说明,就会自动带上http://www.localhost:8080发送请求。

假设baseURL=‘/dev’,axios.get(‘/api/product/getBaseCategoryList’),那么浏览器发送请求时的完整URLhttp://www.localhost:8080/dev/api/product/getBaseCategoryList

但数据明显不是从本机拿来的 => 脚手架帮我们配置了代理

总结: 浏览器发送的请求是 http://www.localhost:8080/dev/api/product/getBaseCategoryList,但发送给了脚手架的代理,代理转发请求到真正有数据的服务器。而我们知道vue配置代理的位置在 vue.config.js文件

以视频中这个配置为例。意思是匹配请求前缀为 /dev 的请求,命中之后把这个请求转发给 target 配置里的服务器,并且我在转发的时候去掉了 dev (pathRewrite)
在这里插入图片描述

注意:如果你是用vue3+vite重写,那么按照下面的重写方式:
在这里插入图片描述

本地服务器部署

首先你得有服务器,比如node写的服务器。把打包好的dist文件夹中的内容替换到public目录下。

问题 & 解决

出现两个问题:

问题1:刷新页面404问题

打开8088端口的一瞬间(node服务器开辟的端口),加载了整个网页,网页引入JS,靠前端的JS完成了一次路由跳转,来到了首页/home。当我们刷新的时候,浏览器误以为/home是后端路由,但是服务器中没有这个路由。
解决方案:
① 在前端项目中,把路由mode:'history'模式(路径中没有#那个)改成 mode:'hash'。然后重新构建前端项目,放到node服务器中。
② 因为浏览器地址栏中发送的请求都属于GET,所以在服务器代码中添加下述代码。意思是“当我什么都匹配不上的时候,我就把前端页面/public/index.html给你,一旦给你之后,里面引入的JS就可以工作,JS工作证明前端路由可以奏效”

app.get('*',(req,res)=>{
  res.sendFile(__dirname + '/public/index.html')
})

③ 在服务器项目中安装包connect-history-api-fallback并使用该中间件。这个方法很灵活

npm i --save connect-history-api-fallback
const history = requie('connect-history-api-fallback')
app.use(history())

这个方法很灵活,灵活在他的一些配置
在这里插入图片描述

问题2:ajax请求废了

打包完之后,是纯文件了(html css js),没有脚手架了,不能使用脚手架的代理服务器了。此时发送的请求为:http://www.localhost:3000/dev/api/product/getBaseCategoryList,这里的http://www.localhost:3000是假设为express默认开启的端口。因为当页面发送请求的时候,没有说明协议+域名+端口,就会默认为当前位置。

解决方法
① http-proxy-middleware包。

npm i  http-proxy-middleware
const { createProxyMiddleware } = require('http-proxy-middleware')
app.use({
	'/dev',
	createProxyMiddleware({
		target: '尚硅谷api网站',
		changeOrigin: true,
		pathRewrite: { '^/dev' : '' }
    })
})

nginx部署

注意:修改了nginx下的文件之后需要重启nginx服务。

把打包完的dist文件夹的内容 替换掉nginx/html下的index.html,此时前两个问题又出现了。

① 解决刷新页面404问题

在conf/ nginx.conf 文件中添加这句话:

try_files $uri $uri/ /index.html;

在这里插入图片描述

② 解决ajax请求废了问题

在conf/ nginx.conf 文件中添加:
不要在nginx.conf中加注释,分号记得切换为英文模式。

location /dev {
	proxy_pass http://sph-h5-api.atguigu.cn;
}

这里怎么设置路径带不带 /dev ?写上两个斜杠,就是干掉dev,不写就是不干掉

location /dev/ {
	proxy_pass http://sph-h5-api.atguigu.cn/;
}

在这里插入图片描述

云服务器部署

详情请看B站视频 BV19n4y1d7Gr 《禹神:前端项目部署指南,前端项目打包上线》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java——break、continue和return

一、break break语句用于立即终止最内层的循环或switch语句。它是一种控制流语句,能够在满足特定条件时跳出循环或结束switch块的执行。 1、在循环中使用 1)一般的 break break语句可以用于for、while和do-while循环中。当在循环中遇到break语句时&a…

剪辑软件大揭秘:解锁图片叠加新技能,轻松将一张图片置于另一张图片之上,创意无限!

在数字时代的浪潮中,视频剪辑已经成为我们生活中不可或缺的一部分。无论是记录生活点滴,还是打造专业影片,一款功能强大的视频剪辑软件都是我们的得力助手。今天,就让我为大家揭秘一款神奇的剪辑软件——媒体梦工厂,它…

MySQL排序操作

025排序操作 select .. from .. order by 字段 asc/descselect empno, ename, sal from emp order by sal asc;asc 不写的话,默认升序 多个字段排序 查询员工的编号、姓名、薪资,按照薪资升序排列,如果薪资相同的,再按照姓名升…

5G商用五周年,我们该如何评价它?

今天,对中国通信行业来说,是一个特殊的日子。 五年前,也就是2019年6月6日,工信部正式向中国电信、中国移动、中国联通、中国广电发放了5G商用牌照,标志着国内5G开始正式商用。 换言之,今天,是中…

Mysql学习(四)——SQL通用语法之DQL

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 DQLDQL-语法基本查询条件查询聚合函数分组查询排序查询分页查询 DQL DQL数据查询语言,用来查询数据库中表的记录。 DQL-语法 select 字段列表 from 表…

深度强化学习+大模型综述Survey on Large Language Model-Enhanced Reinforcement Learning

论文地址:[2404.00282] Survey on Large Language Model-Enhanced Reinforcement Learning: Concept, Taxonomy, and Methods (arxiv.org) 摘要 对 LLM 增强 RL 中现有文献进行了全面的回顾,并总结了其与传统 RL 方法相比的特征,旨在阐明未…

【Python短期内快速掌握学习人工智能知识能力】:从零到入门的NLP学习秘籍

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

基于.NetCore和ABP.VNext的项目实战九:集成Hangfire实现定时任务处理

Hangfire 是一个开源的.NET 任务调度框架,它提供了内置集成化的控制台,允许用户直观明了地查看作业调度情况。它基于队列的任务处理机制,客户端使用 BackgroundJob 类的静态方法 Enqueue 来调用指定的方法或匿名函数,并将任务持久化到数据库。 本文将完成一个任务调度中心…

实验五、IPv4地址的子网划分,第1部分《计算机网络》

但凡你有点本事,也不至于一点本事都没有。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 完成本练习之后,您应该能够确定给定 IP 地址和网络掩码 的网络信息。本练习旨在让您掌握如何根据给定 IP 地址计算网络 IP 地址信息。 二、实验…

万里长城第一步——尚庭公寓【技术概述】

简略版: 项目概述主要是移动端(房源检索;预约看房,租赁管理,浏览历史)和后台管理(管理员对房源进行操作); 项目使用前后端分离的方法,主要以后端为主&#xf…

企业数据挖掘建模平台极简建模流程

泰迪智能科技企业数据挖掘建模平台是企业自主研发,面向企业级用户的快速数据处理构建模型工具。平台底层算法基于R语言、Python、Spark等引擎,使用JAVA语言开发,采用 B/S 结构,用户无需下载客户端,可直接通过浏览器进…

CANoe-Trace窗口无法解析SOME/IP报文、Demo License激活方式改变

1、Trace窗口无法解析SOME/IP报文 在文章《如何让CANoe或Wireshark自动解析应用层协议》中,我们通过设置指定端口号为SOME/IP报文的方式,可以让CANoe中的Trace窗口对此端口号的报文当成是SOME/IP报文进行解析。 Trace窗口就可以根据传输层端口号对payload数据按照SOME/IP协议…

【前端面试3+1】18 vue2和vue3父传子通信的差别、props传递的数据在子组件是否可以修改、如何往window上添加自定义属性、【多数元素】

一、vue2和vue3父传子通信的差别 1、Vue2 父组件向子组件传递数据通常通过props属性来实现。父组件可以在子组件的标签中使用v-bind指令将数据传递给子组件的props属性。在子组件中,可以通过props属性来接收这些数据。这种方式是一种单向数据流的方式,父…

Astar路径规划算法复现-python实现

# -*- coding: utf-8 -*- """ Created on Fri May 24 09:04:23 2024"""import os import sys import math import heapq import matplotlib.pyplot as plt import time 传统A*算法 class Astar:AStar set the cost heuristics as the priorityA…

【C++】 使用CRT 库检测内存泄漏

CRT 库检测内存泄漏 一、CRT 库简介二、CRT 库的使用1、启用内存泄漏检测2、设置应用退出时显示内存泄漏报告3、丰富内存泄漏报告4、演示使用 内存泄漏是 C/C 应用程序中最微妙、最难以发现的 bug,存泄漏是由于之前分配的内存未能正确解除分配而导致的。 最开始的少…

面试(02)————Java集合篇

目录 一、为什么数组索引是从0开始?如果从1开始不行吗? 二、ArrayList底层的实现原理是什么? ​编辑三、ArrayList list new ArrayList(10)中的list扩容几次? 四、如何实现数组与List之间的转换? 五、ArrayList…

计算机图形学入门07:光栅化中的采样与走样

1.什么是光栅化? 在前面的章节里提过,光栅化(Rasterization)就是将物体投影在屏幕上的图形,依据像素打散,每一个像素中填充不同的颜色。 如下图中的老虎,可以看到屏幕上有各种多边形,这些多边形经过各种变换…

线性回归模型详解

一、引言 在机器学习中,线性回归模型是最基础也是最重要的预测模型之一,它是监督学习的一个简单但强大的工具,用于预测输出变量(Y)与一个或多个输入变量(X)之间的关系。线性回归模型以其容易理…

动态IP与静态IP的优缺点

在网络连接中,使用动态和静态 IP 地址取决于连接的性质和要求。静态 IP 地址通常更适合企业相关服务,而动态 IP 地址更适合家庭网络。让我们来看看动态 IP 与静态 IP 的优缺点。 1.静态IP的优点: 更好的 DNS 支持:静态 IP 地址在…

【因果推断python】19_局部平均效应2

目录 局部平均干预效果:后期 对参与度的影响 关键思想 局部平均干预效果:后期 局部平均处理效应明确了我们可以估计因果效应的人群。这也是查看 IV 的另一种方式,它提供了我们可以使用的其他很酷的直觉。在现代 IV 中,我们将工…