create-react-app v5 打包配置(部署到非根目录)

部署到非根目录:

部署到非根目录就需要配置 publicPath和base。

publicPath: 用于指定构建后静态资源在服务器上的路径。

base: 用于指定应用程序的根路径,以确保路由可以正确匹配到对应页面。这两个配置项在部署到非根目录时很重要,可以确保应用的资源和路由正常加载和导航。

修改homepage和BrowserRouter 的basename:

部署到非根目录 可以 在package.json 里的homepage配置。homepage=pubilcPath。

比如:部署在 fund_diag_h5下 ,homepage:"/fund_diag_h5/" 。

这样 部署完后,会发现,js,css请求成功了,但页面啥也不显示。

所以还需要对路由做个处理,给路由也加上前缀,BrowserRouter 有个basename属性,这个可以控制路由前缀。

我的App.js 路由配置如下(重点是看BrowserRouter 的basename,其他的你可以忽略):

javascript 复制代码
import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import routes from './routes.js';
const App = () => {
  console.log(routes)
  return (
    <BrowserRouter basename="/fund_diag_h5">
      <Routes>
        {routes.map((route) => (
          <Route key={route.path} path={route.path} element={route.component}/>
        ))}
        {/* <Route path="*" element={<Home />} />  */}
      </Routes>
    </BrowserRouter>
  );
};

export default App;

这样配置完后就能看到页面了,修改完需要重新 build才行。basename打包时才用加上,不打包时,就需要去掉,否则本地就看不到页面了(这个可以手动控制也可以根据环境变量来控制)。

如果你的路由模式不是BrowserRouter 则不用处理 basename属性(MemoryRouter、HashRouter不用处理)。

具体路由模式的区别和优缺点可以看:
react create-react-app v5 配置路由(报错及注意事项)

使用customize-cra 和react-app-rewired 配置(不暴露 eject):

javascript 复制代码
npm install react-app-rewired customize-cra-5 --save-dev

然后 package.json里的scripts需要修改成:

javascript 复制代码
"scripts": {
  "start": "react-app-rewired start",
  "build": "react-app-rewired build",
  "test": "react-app-rewired test",
  "eject": "react-scripts eject"
}
javascript 复制代码
const { override } = require('customize-cra');
module.exports = override(
  (config) => {
    // 设置 publicPath
    config.output.publicPath = '/your-custom-public-path/';
    // 设置 base
    config.devServer.historyApiFallback = {
      ...config.devServer.historyApiFallback,
      index: '/your-custom-public-path/index.html',
    };
    
    return config;
  }
);

修改完配置需要重新start 和build(如果需要打包的话)。

运行 npm run eject配置

其实运行完后,就跟普通 webpack配置一样了,直接按照webpack 配置 publicPath和base就行。

部署步骤和注意事项(仅我的环境,做个笔记):

我需要部署到 apache tomact 的webapps/fund_diag_h5

需要注意的是 把build里的文件复制到 fund_diag_h5里(不是把整个build拖进去)。

还需要给 fund_diag_h5 读取权限 一般是755即可(这个步骤,每次重新部署后,都要操作一下)。

我是使用FileZIlla(FileZilla部署前端项目) ,这里面可以鼠标右键=>文件属性

然后输入 755 还需把递归子目录选上。

当然也可以用命令行来:

要将 Tomcat 目录权限设置为 755,你需要在操作系统中使用适当的命令来更改目录的权限。下面是在 Linux 或 macOS 操作系统中设置 Tomcat 目录权限为 755 的步骤:

打开终端或命令行界面。

使用 cd 命令进入 Tomcat 的安装目录。例如:

bash 复制代码
cd /path/to/tomcat

使用 chmod 命令更改目录权限。对于目录的权限设置,755 表示所有者具有读写执行权限,组用户和其他用户具有读执行权限。命令如下:

bash 复制代码
chmod 755 .

注意:BrowserRouter 是不带井号的,所以 部署时后端需要 配合一下 比如:重定向到 index.html

具体配置,建议自行查阅。

比如:在Tomcat的web.xml文件中添加以下配置,以将所有请求重定向到应用程序的入口文件上:

xml 复制代码
<web-app>
  <!-- ... -->
  <error-page>
    <error-code>404</error-code>
    <location>/your-app-name/index.html</location>
  </error-page>
</web-app>

具体配置axios和注意事项 可以参考:react create-react-app v5 配置路由(报错及注意事项)

相关推荐
lzb_kkk10 天前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
lzb_kkk1 个月前
【MFC】编辑框、下拉框、列表控件
c语言·开发语言·c++·mfc·1024程序员节
lzb_kkk1 个月前
【MFC】树控件的使用详解
开发语言·c++·windows·mfc·1024程序员节
SizeTheMoment2 个月前
List介绍
1024程序员节
开利网络2 个月前
产业互联网+三融战略:重构企业增长密码
大数据·运维·服务器·人工智能·重构·1024程序员节
wei_shuo2 个月前
从数据中台到数据飞轮:实现数据驱动的升级之路
1024程序员节·数据飞轮
玖剹3 个月前
矩阵区域和 --- 前缀和
数据结构·c++·算法·leetcode·矩阵·动态规划·1024程序员节
jamison_14 个月前
文心一言与 DeepSeek 的竞争分析:技术先发优势为何未能转化为市场主导地位?
人工智能·ai·chatgpt·gpt-3·1024程序员节
NaZiMeKiY4 个月前
HTML5前端第六章节
前端·html·html5·1024程序员节
jamison_14 个月前
颠覆未来:解锁ChatGPT衍生应用的无限可能(具体应用、功能、付费模式与使用情况)
ai·chatgpt·1024程序员节