当前位置: 首页 > 知识库问答 >
问题:

我应该如何配置CreateReact应用程序以从子目录服务应用程序?

阮喜
2023-03-14

我在服务器上呈现了经典的web应用程序。我想在React中创建管理面板作为单页应用程序。我想从服务器管理面板https://smyapp.example.com/admin/.我尝试使用createreact app,但它假设我从根URL提供SPA服务。我应该如何配置create react app以从“admin”子目录服务应用程序?在文档中,我找到了“homepage”属性,但如果我正确理解它,则需要完整的url。我无法提供完整的url,因为我的应用程序部署在少数环境中。

共有3个答案

满言
2023-03-14

您应该在包中添加条目。json用于此。

在包中添加一个键“主页”:“您的子文件夹/”。json将从“您的子文件夹”加载所有静态文件

如果没有子文件夹,并且需要从同一文件夹加载,则需要将路径添加为“/”或删除包含“homepage”:“xxxxxxxxx”

“主页”:“/”

从官方文件

默认情况下,如果应用托管在服务器根目录下,CreateReact App会生成一个生成。要重写此选项,请在package.json中指定主页,例如:

“主页”:http://mywebsite.com/relativepath",

注意:如果您使用的是react router@^4,则可以路由

从这里开始,并查看CRA官方文件

何和惬
2023-03-14

对于create-react-app v2和react-router v4,我使用以下组合为/app下的生产(分期,uat等)应用提供服务:

包裹json:

"homepage": "/app"

然后在应用程序入口点:

 <BrowserRouter basename={process.env.PUBLIC_URL}>
  {/* other components */}
 </BrowserRouter>

在本地开发和部署环境中,一切都“正常工作”。HTH!

江凯风
2023-03-14

除了您的要求之外,我还要补充我的要求:

  • 它应该通过光盘完成,通过一个环境变量。
  • 如果我需要重命名子目录,我应该只需要改变env变量。
  • 它应该与反应路由器一起工作。
  • 它应该与scss(sass)和html一起工作。
  • 在开发模式(npm启动)下,一切都应该正常工作。

不久前,我还必须在Angular2项目中实现它,我发现在React中实现它比在Angular2中实现更困难,在Angular2中,您可以使用ng build--base href/

  1. 在构建之前,将PUBLIC\u URLenv变量设置为子目录的值,例如使用/subdir。您还可以将此变量放入。环境。生产(如果您没有该文件,您可以检查文档)
  2. public/index中。html添加下面的基本元素,这是用于静态文件(如图像)
<base href="%PUBLIC_URL%/">
<BrowserRouter basename={process.env.PUBLIC_URL} />
// history.tsx
import {createBrowserHistory} from 'history';

export default createBrowserHistory({ basename: process.env.PUBLIC_URL });
<!-- Where your router is, for me, App.tsx -->
<Router history={history}>
  ...
</Router>
<!-- "./assets/quotes.png" is also ok, but "/assets/quotes.png" is not -->
<img src="assets/quotes.png" alt="" />
/*remove that*/
background-image: url('/assets/background-form.jpg');
<section style={{backgroundImage: `url('assets/background-form.jpg')`}}>
...

你应该完蛋了。

我更喜欢使用公共URL而不是包中的主页。json,因为我想使用gitlab上的env变量set来设置subdir。关于该主题的相关资源:

  • https://create-react-app.dev/docs/deployment/#building-对于相对路径

PUBLIC\u URL覆盖homepagePUBLIC\u URL如果您提供域名,也会使用域名。如果仅设置主页公共URL将设置为主页的值。

如果不想在索引中使用基元素。html(我不知道为什么),您将需要附加进程。环境。公开URL到您自己的每个链接。请注意,如果您使用基本元素创建react router,但未设置basenameprop,则会收到警告。

Sass不会使用错误的相对路径进行编译。它也不会使用到的正确相对路径进行编译/public/assets文件夹,由于ModuleScopePlugin限制,您可以通过在src文件夹中移动图像来避免限制,我还没有尝试过。

似乎没有办法在开发模式(npm start)中测试相对路径

最后,这些stackoverflow链接都有相关的问题:

  • 我可以在react路由器中设置基本路由吗
  • 使用环境变量设置base href

 类似资料:
  • 我正在尝试从application.yml的XML导入目标配置中配置我的回退。 当我在XML中设置静态目标时,一切都很好,但如果不是,我在启动时会出现这个异常: 我的依赖关系: Spring启动:“1.5.4.发布” net.logstash.logback:logstash-logback-encoder:4.9 logback-spring.xml applicaiton.yml 我试图避免将

  • 问题内容: 我正在写一个Java库,实际上是一个Clojure库,但是对于这个问题,重要的是它在JVM上运行。该库需要执行一些JavaScript。我尝试过Nashorn,但遇到了一些局限性,可能难以克服。另外,我想尝试NodeJS。 我希望我的库是独立的,不依赖于独立运行NodeJS的系统,因此需要一种特殊的部署机制将Java和NodeJS工件放置在正确的位置,以便由两个不同的网络服务器接收。但

  • 问题内容: 我需要找到Android应用程序中的瓶颈所在。 我可以使用哪些配置文件工具或技术? 问题答案: 您可以使用Traceview。它远非理想,但可行。 本文介绍了如何使用它。

  • 应用程序服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端。 应用程序服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端。支持 ASP.NET、ASP.NET Core、Java、Ruby、Node.js、PHP 或 Python等主流编程语言,用户可以无需管理底层基础设置,即可简单、高效、安全和灵活地对应用进行部署、

  • 我正在通过终端安装CreateReact应用程序。我已经检查了节点。js版本是4.5。0,高于此处的要求。npm的版本是2.15。9.然后我键入命令npm install-g create react app,出现这样的错误信息: 我想知道为什么我会犯这样的错误。有人能帮我解决这个问题吗?非常感谢你!

  • 我在azure portal中为Cosmos帐户启用了多写功能。我不明白是否也必须使用SDK来设置ApplicationRegion?如果是强制的,这个属性的目的是什么?我看到了下面的文档,但我仍然不清楚。 文档

  • 我正在尝试在ASP中配置自定义日志记录。NET核心MVC应用程序。该应用程序托管在Linux上的Azure应用程序服务上(免费层)。日志文件没有出现,我做错了什么? 我的配置: 以下ASP。NET Core日志记录文档(https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#azu

  • 我已在单独的Weblogic域中成功配置了SAML 2.0身份提供程序 我们在另一个域的Weblogic中部署了一个ADF应用程序,该应用程序具有非SAML基于表单的身份验证(ReadOnlySQLAuthenticator用于验证凭据) 我想将第二个域配置为服务提供者(以使现有应用程序能够使用身份提供者登录)。 我做了以下工作: 配置SAML 2.0 Identity Asserter 在服务器