Reactjs “自定义根路径下的问题”/app";使用创建react应用程序和react路由器

Reactjs “自定义根路径下的问题”/app";使用创建react应用程序和react路由器,reactjs,create-react-app,Reactjs,Create React App,我正在具有以下设置的主机上部署应用程序: 等等 我需要为我的React应用程序部署一个自定义根路径/app,该应用程序将位于此保护伞下。我正在使用react路由器v5和创建react应用程序 问题 当我构建应用程序(我正在使用)时,我会得到一个空白页面。当我转到localhost:5000/app/时,没有显示任何内容 我做了和的所有建议,但仍然无法加载我的应用程序 我也很困惑:使用react路由器的basename和CRA的主页字段有什么区别?我应该两者都用,还是一个或另一个 编辑:可

我正在具有以下设置的主机上部署应用程序:

  • 等等
我需要为我的React应用程序部署一个自定义根路径
/app
,该应用程序将位于此保护伞下。我正在使用
react路由器v5
创建react应用程序

问题 当我构建应用程序(我正在使用)时,我会得到一个空白页面。当我转到
localhost:5000/app/
时,没有显示任何内容

我做了和的所有建议,但仍然无法加载我的应用程序

我也很困惑:使用react路由器的
basename
和CRA的
主页
字段有什么区别?我应该两者都用,还是一个或另一个

编辑:可能发现问题。设置<代码>主页= /APP < /代码>也改变了我的JS包的路径,它没有识别(因此空白页)。我在我的
build
dir中手动添加了一个
app
文件夹,如下所示:
build/app/static
,它成功了。CRA不应该自动这样做吗

我的设置 app.tsx 命令在本地为prod构建提供服务 我导航到
http://0.0.0.0:5000/app/
并获得一个空白页(无网络呼叫)

我试过的
  • package.json中设置
    主页:“/app”
  • 为react路由器设置basename
  • 显示了使用网站完整路径的示例。这也不起作用:

我让它工作了,尽管这是一个解决办法

正如Mohit的评论所提到的,
homepage
字段使其成为所有资产都由
homepage
中定义的子路径预挂。我得到了一个空白屏幕,因为它找不到我的JS包的新路径,也就是说它从提供
/build/static/JS/.
/build/app/static/JS/.

解决方案(解决方案)
  • build
    目录下创建一个名为
    app
    (或任何新根路径的名称)的新文件夹
  • 将您的
    /build/static
    文件夹移动到
    build/app/static
  • 这就是Dockerfile的外观:
你可以取出
pwd
echo
行,我添加了它,这样我就可以看到它工作了


我不知道CRA为什么默认不这么做。这可能是因为我正在使用重新布线的
react应用程序,这会干扰CRA的网页配置?

进程.env.PUBLIC\u URL
值是否正确?我在build命令中找不到它,或者您是否已将其包含在.env文件中。基本上,
主页
用于访问与提供的价值相关的资产,例如CSS文件和图像。而react路由器使用
basename
值来处理相对于所提供值的客户端路由。为了使应用程序正确运行,这两个选项都应该包括在内。是的,当我看到console.log
process.env.PUBLIC\u URL时,我看到了
/app
。啊,我明白了-谢谢你在
主页/basename
上的澄清!。所以我看到了部分问题——添加
homepage=/app
也会将JS包的路径从
static/JS/main.JS
更改为
app/static/JS/main.JS
。我在我的
build
dir中手动添加了一个
app
文件夹,并将我的
static
文件夹移动到其中。成功了。这不应该自动发生吗?
<Router basename={process.env.PUBLIC_URL}>
  ...
</Router>
scripts: {
  "build-prod": "GENERATE_SOURCEMAP=false REACT_APP_ENVIRONMENT=production react-app-rewired build",
},
...
"homepage": "/app",
> npm run build-prod && serve -s build -l tcp://0.0.0.0:5000

The project was built assuming it is hosted at /app/.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.

Find out more about deployment here:

  bit.ly/CRA-deploy

"homepage": "https://example.com/app",
RUN pwd
RUN echo $(ls -1 $pwd)
RUN echo $(ls -1 ./build)
RUN mkdir -p ./build/app
RUN mv ./build/static ./build/app # now it should be /build/app/static
RUN echo $(ls -1 ./build)