Nginx部署Umi React前端项目标准配置

devtools/2025/2/9 2:24:07/

文章目录

    • 概要
    • 前端Umi项目
      • 配置文件
      • 请求后端Api
      • 打包
    • 后端项目
    • Nginx配置
      • 配置文件
    • 错误信息

概要

使用UmiJs开发的前端项目打包部署在Nginx,主要是Umi中项目的配置和Nginx的配置

前端Umi项目

基于"@umijs/max": "^4.3.24", + "react": "^18.3.1"

配置文件

./.umirc.ts

import { defineConfig } from '@umijs/max';
export default defineConfig({npmClient: 'yarn',esbuildMinifyIIFE: true,base: '/web/',publicPath: '/web/',favicons: ['/src/assets/favicon.png'],
});

注意文件中的 /web/

请求后端Api

./src/utils/util.tsx

import { request as umiRequest } from 'umi';
const request = (url: string, options?: RequestConfig) => {return umiRequest('/api' + url, {...options,});
};

注意文件中的 /api,最终的url应该是 /api/url 形式,即调用 request 方法的时候传参 url 应该是以 / 开头

打包

./package.json

{"scripts": {"build": "max build",},
}
  • > yarn build
  • > ./dist

后端项目

普通的提供Restful Api的Http服务端即可

  • > 8888
  • > 前端项目能正常访问

Nginx配置

版本:1.26.3

配置文件

./conf/nginx.conf

http {include       mime.types;default_type  application/octet-stream;server {listen       80;server_name  localhost;# 后端Api配置location /api/ {proxy_pass http://localhost:8888/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}# 前端项目打包后产生dist,将dist重命名为web,放置到/tmp下# 即 /tmp/web 对应下面的配置# 注意 /web /web/index.html 这些和前端打包时对应一致,否则会出现错误,在浏览器控制台查看location /web {# root /usr/local/nginx/html;root /tmp;index index.html;try_files $uri /web/index.html;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

错误信息

由于不满足以上所有配置而出现的错误信息

  • Uncaught SyntaxError: Unexpected token '<' (at preload_helper.js:1:1)Understand this errorAI
  • umi.js:1 Uncaught SyntaxError: Unexpected token '<' (at umi.js:1:1)

查看浏览器请求响应,这个对应请求JS资源的响应尽然返回的是HTML,且是 dist/index.html的内容,在页面报错需要关注 nginxerror.log 日志信息方便查错


http://www.ppmy.cn/devtools/157233.html

相关文章

RTMP 和 WebRTC

WebRTC(Web Real-Time Communication)和 RTMP(Real-Time Messaging Protocol)是两种完全不同的流媒体协议,设计目标、协议栈、交互流程和应用场景均有显著差异。以下是两者的详细对比,涵盖协议字段、交互流程及核心设计思想。 一、协议栈与设计目标对比 特性RTMPWebRTC传…

5分钟掌握React的Redux Toolkit + Redux

Redux Toolkit Redux 教程 1. 引言 本教程介绍如何使用 Redux Toolkit&#xff08;RTK&#xff09; 和 TypeScript 搭建 Redux 状态管理系统。 我们将创建一个 计数器&#xff08;Counter&#xff09; 和 待办事项&#xff08;Todo&#xff09; 模块&#xff0c;并学习 Redu…

C++六大默认成员函数

C六大默认成员函数 默认构造函数默认析构函数RAII技术RAII的核心思想优点示例应用场景 默认拷贝构造深拷贝和浅拷贝 默认拷贝赋值运算符移动构造函数&#xff08;C11起&#xff09;默认移动赋值运算符&#xff08;C11起&#xff09;取地址及const取地址操作符重载取地址操作符重…

QT +FFMPEG4.3 拉取 RTMP/http-flv 流播放 AVFrame转Qimage

QT FFMPEG4.3 拉取 RTMP/http-flv 流播放 Cc_Video_thread.h #ifndef CC_VIDEO_THREAD_H #define CC_VIDEO_THREAD_H#include <QThread> #include <QAtomicInt> #include <QImage>#ifdef __cplusplus extern "C" { #endif #include <libavfor…

C基础寒假练习(8)

一、终端输入10个学生成绩&#xff0c;使用冒泡排序对学生成绩从低到高排序 #include <stdio.h> int main(int argc, const char *argv[]) {int arr[10]; // 定义一个长度为10的整型数组&#xff0c;用于存储学生成绩int len sizeof(arr) / sizeof(arr[0]); // 计算数组…

DeepSeek 开源模型全解析(2024.1.1–2025.2.6)

目录 一、通用大语言模型&#xff1a;DeepSeek-V3 系列 137 二、推理优化模型&#xff1a;DeepSeek-R1 系列 811 三、多模态模型&#xff1a;Janus 系列 10 四、生态整合与部署建议 五、总结与展望 以下为 DeepSeek 在 2024 年 1 月至 2025 年 2 月期间发布的开源模型及其…

第十八章 视图

目录 一、概述 二、语法 2.1. 创建视图 2.2. 查询视图 2.3. 修改视图 2.4. 删除视图 2.5. 示例 三、检查选项 3.1. CASCADED&#xff08;级联&#xff09; 3.2. LOCAL&#xff08;本地&#xff09; 四、视图的更新 五、视图作用 5.1. 简单 5.2. 安全 5.3. 数据独…

数据库课程设计基于Java+MySQL+JDBC+JavaSwing的停车场管理系统源代码+数据库,进出车辆登记,车位管理

&#x1f697;停车场管理系统 运用技术 Java语言MySQL数据库JDBCSwing窗口交互 实现效果 用户登录&#xff1a;输入账号密码&#xff0c;验证通过方可进入&#xff0c;否则给出错误提示&#xff0c;拒绝访问 用户注册&#xff1a;提供用户注册功能&#xff0c;输入用户名&am…