reactjs - 在开发模式下使用 create-react-app 时如何将应用程序放在子文件夹中?
问题描述
这里有很多答案,其他地方的博客文章(包括官方文档https://facebook.github.io/create-react-app/docs/deployment#building-for-relative-paths)解释了如何构建你的反应应用程序以便它可以从子文件夹中运行。
但是,当我仍处于开发模式时,我找不到如何从子文件夹运行它的方法。(即不运行:npm run build)
我想在执行时看到应用程序在 localhost:3000/web 上运行:npm start。不是本地主机:3000。自动注入的静态资源(如
src="/static/js/bundle.js"
src="/static/js/1.chunk.js"
src="/static/js/main.chunk.js"
src="/main.947eb2055b7df4ce1a9e.hot-update.js"
) 应相应调整其路径以包含应用程序的子文件夹名称“web”。
可能吗?
我应该自己“弹出”应用程序和配置吗?
我应该克隆并更改“react-scripts start”吗?
有没有更简单的方法?
谢谢
更新:
我应该提供更多细节。我确实使用反向代理“http-proxy-middleware”,这就是我需要在子文件夹中运行每个应用程序的原因。下面使用 BrowserRouter 的“basename”的建议适用于链接,但不适用于注入的静态资源,例如“/static/js/bundle.js” 当您使用“basename”、“homepage”和运行方式:npm start。
因此,当您在端口 80 上的反向代理后面运行它时,它会尝试访问不存在的 localhost/static/js/bundle.js。它应该访问 localhost/web/static/js/bundle.js 代替。但是由于这些链接是自动注入的,我无法控制添加“web”作为前缀。
解决方案
与BrowserRouter
您合作时,只需添加basename
as即可实现此目的prop
。
从文档中,
所有位置的基本 URL。如果您的应用程序是从服务器上的子目录提供的,您需要将其设置为子目录。格式正确的基本名称应该有一个前导斜杠,但没有尾随斜杠。
<BrowserRouter basename="/web">
//Your routes
</BrowserRouter>
注意:还需要在package.json
文件中维护一个条目为
"homepage": "http://Domain_name/web",
推荐阅读
- xml - 如何在 CFML 中解析 XML 数据
- firebase - 是否有任何 API 或 firebase 命令来获取 Firebase App Distribution 中 iOS 设备的 UUID 列表
- python-3.x - 如何将字典写入 CSV 文件?
- node.js - 2021 年使用 Nodejs + TypeScript 的 REST API
- php - 尝试访问 bool 类型值的数组偏移量
- java - Kafka Connect API 和 Avro 对象(SourceRecord 与 org.apache.avro.Schema)
- https - 如何在 Cloud Run for Anthos on Google Cloud 集群上启用 HTTPS?
- c++ - vector.back() 和 vector[vector.size() - 1] 之间的区别?
- node.js - Meteor / NodeJS 在迁移开始之前运行自己的代码(Meteor 启动)
- javascript - 在java中使长路径代码更短