前端基础:React项目打包部署服务器教程

问题背景

我做了一个React框架的前端的Node项目,是一个单页面应用。

页面路由用的是,然后使用了React.lazy在路由层级对每一个不同页面进行了懒加载,只有打开那个页面才会加载对应资源。

然后现在我用了Webpack5对项目进行了打包,需要将项目部署到服务器上。

PS:vue项目打包部署同理。

打包好的build文件夹如下图。

image-20231013102755228

问题解决

方法一:Serve静态服务器

使用前服务器环境需要安装好NodeJS和npm。

使用npm -v 和 node -v进行查看。

安装好之后就要安装serve。

# 全局安装serve
npm install -g serve

安装好之后,将本地打包的build文件夹都上传到服务器目录中。

用终端打开对应的项目的文件夹(注意文件路径是在build文件夹的上一层,如下图)。

image-20231013103919269

终端输入serve -s build运行静态服务器。

image-20231013104024656

运行成功的效果如上图所示,该项目就运行在指定的端口中,可以输入 -l 参数,指定运行端口。

serve -s -l 3333 build

方法二:Nginx代理静态页面

先确保服务器安装好Nginx,能正常运行。

将项目的打包build文件夹上传到服务器中。

然后就是改Nginx的配置文件了。

server
{listen 80;listen 443 ssl http2;server_name xxxxxxxxxxxx; # 改成自己的域名或ip index index.php index.html index.htm default.php default.htm default.html;root /www/frontTeachingSystem/build;#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则#error_page 404/404.html;ssl_certificate    /www/server/panel/vhost/cert/xxxxxxxxxxxx/fullchain.pem;ssl_certificate_key    /www/server/panel/vhost/cert/xxxxxxxxxxxx/privkey.pem;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;add_header Strict-Transport-Security "max-age=31536000";error_page 497  https://$host$request_uri;#SSL-END#ERROR-PAGE-START  错误页配置,可以注释、删除或修改#error_page 404 /404.html;#error_page 502 /502.html;#ERROR-PAGE-END#PHP-INFO-START  PHP引用配置,可以注释或修改include enable-php-00.conf;#PHP-INFO-END#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效include /www/server/panel/vhost/rewrite/xxxxxxxxxxxx.conf;#REWRITE-ENDlocation / {try_files $uri $uri/ /index.html;}#禁止访问的文件或目录location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md){return 404;}#一键申请SSL证书验证目录相关设置location ~ \.well-known{allow all;}#禁止在证书验证目录放入敏感文件if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {return 403;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires      30d;error_log /dev/null;access_log /dev/null;}location ~ .*\.(js|css)?${expires      12h;error_log /dev/null;access_log /dev/null;}access_log  /www/wwwlogs/xxxxxxxxxxxx.log;error_log  /www/wwwlogs/xxxxxxxxxxxx.error.log;
}

以上是我的Nginx的配置文件,我是弄了SSL证书的。

注意一定要加下面这段。

location / {try_files $uri $uri/ /index.html;
}

因为我部署的是单页面应用,页面的路由是虚拟路由,实际并没有对应的文件,如果不加这个的话,路由跳转时Nginx会去寻找对应的文件,导致找不到文件404错误,项目无法正常运行。

我一开始在网上搜索资料的时候,查到的让把"root"属性的文件路径改在build文件夹的上一层,然后在index属性中加入"build",像下面这样

server
{listen 80;listen 443 ssl http2;server_name xxxxxxxxxxxx; # 改成自己的域名或ip index build index.php index.html index.htm default.php default.htm default.html;root /www/frontTeachingSystem;
}

但我试了下不能正常运行,改成上面的那样就可以了。

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

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

相关文章

【深度学习:理论篇】--Pytorch基础入门

目录 1.Pytorch--安装 2.Pytorch--张量 3.Pytorch--定义 4.Pytorch--运算 4.1.Tensor数据类型 4.2.Tensor创建 4.3.Tensor运算 4.4.Tensor--Numpy转换 4.5.Tensor--CUDA(GPU) 5.Pytorch--自动微分 (autograd) 5.1.back…

使用 Spring Boot 快速构建企业微信 JS-SDK 权限签名后端服务

使用 Spring Boot 快速构建企业微信 JS-SDK 权限签名后端服务 本篇文章将介绍如何使用 Spring Boot 快速构建一个用于支持企业微信 JS-SDK 权限校验的后端接口,并提供一个简单的 HTML 页面进行功能测试。适用于需要在企业微信网页端使用扫一扫、定位、录音等接口的…

工程师 - FTDI SPI converter

中国网站:FTDIChip- 首页 UMFT4222EV-D UMFT4222EV-D - FTDI 可以下载Datasheet。 UMFT4222EVUSB2.0 to QuadSPI/I2C Bridge Development Module Future Technology Devices International Ltd. The UMFT4222EV is a development module which uses FTDI’s FT4222H…

rcore day6

批处理系统 (Batch System) 出现于计算资源匮乏的年代,其核心思想是: 将多个程序打包到一起输入计算机;当一个程序运行结束后,计算机会 自动 执行下一个程序 应用程序难免会出错,如果一个程序的错误导致整个操作系统都…

Linux系统学习Day2——在Linux系统中开发OpenCV

一、OpenCV简介 OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉和机器学习库,广泛应用于图像处理、视频分析、物体检测等领域。它提供了丰富的算法和高效的工具集,支持C、Python等多种语言&#xff0c…

SAP Overview

SAP—企业运营的数字化引擎 在数字化转型的浪潮中,SAP以其全面的企业应用软件套件,为全球企业提供了强大的运营支持。SAP的模块化解决方案覆盖了企业运作的每一个关键环节,从销售到仓库管理,每个模块都是针对特定业务需求精心设计…

Kafka 中的幂等机制

Kafka 中的 幂等性(Idempotence) 是生产者端的重要机制,旨在确保即使在网络抖动、重试、Broker 重启等情况下,同一条消息不会被重复写入到 Topic 中。这是实现可靠消息传递、避免重复消费的关键手段之一。 ✅ 什么是幂等性&#…

用c语言写一个linux进程之间通信(聊天)的简单程序

使用talk 用户在同一台机器上talk指令格式如下: ​ talk 用户名ip地址 [用户终端号] 如果用户只登录了一个终端,那么可以不写用户终端号,如: talk userlocalhost可以使用who指令来查看当前有哪些用户登录,他的终端号…

深入探索Scala:从基础到进阶的全面总结

在大数据技术领域,Scala语言凭借其独特优势占据重要地位。它与Spark紧密相连,为大数据计算提供强大支持。今天,让我们一同深入回顾Scala从基础到进阶的关键知识点。 Scala开发环境搭建是入门的第一步,需确保JDK安装成功&#xff0…

【每日一个知识点】分布式数据湖与实时计算

在现代数据架构中,分布式数据湖(Distributed Data Lake) 结合 实时计算(Real-time Computing) 已成为大数据处理的核心模式。数据湖用于存储海量的结构化和非结构化数据,而实时计算则确保数据能够被迅速处理…

GPT-5、o3和o4-mini即将到来

原计划有所变更: 关于我们应有何期待的一些零散想法。 深度研究(Deep Research)确实强大但成本高昂且速度较慢(当前使用o3模型)。即将推出的o4-mini在性能上可能与o3相近,但将突破这些限制,让全球用户——甚至免费用户(尽管会有速率限制)——都能用上世界顶级AI研究助…

Spring Cloud LoadBalancer负载均衡+算法切换

目录 介绍核心功能负载均衡启动两个支付服务订单模块引入依赖LoadBalanced 注解启动订单服务测试结果 负载均衡算法切换总结 介绍 Spring Cloud LoadBalancer 是 Spring Cloud 提供的客户端负载均衡解决方案,提供更现代化的 API 和更好的 Spring 生态系统集成。它支…

Chrome 浏览器插件收录

1. Responsive Viewer 可以在同个窗口内,针对同一网站,添加多个不同设备屏幕显示。 在前端开发,需要多端适配,尤其是移动端响应式适配的网站开发中,可以同时测试多个不同屏幕的适配效果。 2. VisBug 提供工具栏&#x…

SQL 函数概述

SQL 函数概述 SQL 函数可以分为几大类,不同数据库系统可能有略微不同的实现。以下是主要的 SQL 函数分类: 1. 聚合函数 (Aggregate Functions) COUNT() - 计算行数 SUM() - 计算总和 AVG() - 计算平均值 MIN() - 找最小值 MAX() - 找最大值 GROUP…

MySQL学习笔记九

第十一章使用数据处理函数 11.1函数 SQL支持函数来处理数据但是函数的可移植性没有SQL强。 11.2使用函数 11.2.1文本处理函数 输入: SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 输出: 说明&#…

认识vue中的install和使用场景

写在前面 install 在实际开发中如果你只是一个简单的业务实现者,那么大部分时间你是用不到install的,因为你用到的基本上都是别人封装好的插件、组件、方法、指令等等,但是如果你需要给公司的架构做建设,install就是你避不开的一个…

【SpringCloud】构建分布式系统的利器

一、引言 在当今数字化时代,随着业务规模的不断扩大和用户量的急剧增长,单体应用逐渐暴露出诸多局限性,如可扩展性差、维护困难等。分布式系统应运而生,而 Spring Cloud 则成为了构建分布式系统的热门框架之一。它提供了一系列丰…

mkdir通配符详解

在 mkdir 命令中使用通配符可以简化批量创建目录的操作。通配符如 {} 和 * 可以用来生成多个目录名称,从而减少重复输入。以下是一些常见的使用方法和示例。 使用 {} 通配符 {} 通配符可以用来生成一系列的目录名称,语法如下: mkdir dir_{…

Transformer的Word Embedding

一、Transformer 中的词嵌入是什么? 1. 定义与作用 • 词嵌入(Word Embedding):将离散的词语映射为低维连续向量,捕捉语义和语法信息。 • 在 Transformer 中的位置: • 输入层:每个词通过嵌入…

Linux 进程间通信:信号机制

Linux 进程间通信:信号机制 在多进程操作系统中,进程之间的通信至关重要,尤其是在Linux系统中,信号(Signal)作为一种特殊的进程间通信方式,广泛用于进程之间的协调和控制。信号可以看作是操作系…