我创建了一个react应用程序,它将从/example-path
提供服务,我在package.json
中定义它如下:
"homepage":"/example-path"
到目前为止工作正常,但现在我想用react-router-dom
添加路由,它错误地检测/example-path
作为URL的一部分。
这是我的代码:
<Router>
<Switch>
<Route path="/product/:id" children={<DisplayProduct />} />
</Switch>
</Router>
不幸的是,react-router-dom
试图匹配完整的URL /example-path/product/10
。如何避免这种情况?是否有可能以某种方式访问homepage
变量?
我可以使用<Router basename="/example-path">
,但是那样的话,这个参数是重复的,我只想在一个地方定义它。
5条答案
按热度按时间sbtkgmzw1#
如何在react应用程序中从package.json访问主页?
PUBLIC_URL
*环境变量访问package.json的homepage
字段中设置的URL。我们有时会使用相对URL将应用程序部署到子目录中,例如我们将应用程序部署到
https://myhostname.com/example-path
中。为此,我们可以为应用程序构建设置环境变量
PUBLIC_URL=/example-path
,或者将package.json主页属性设置为"/example-path"
。那么
PUBLIC_URL
将被设置为/example-path/
。现在,您可以在react应用程序中的任何位置访问此环境变量。运行
npm run build
之后,您可以在build/index.html
中检查您使用%PUBLIC_URL%
的所有地方是否都设置为/example-path/
,如下所示;llmtgqce2#
Router
不知道你的package.json
的任何信息,它只会查看浏览器的位置。如果你使用BrowserRouter
,你可以设置一个basename
:wa7juj8i3#
**编辑:**在
react-scripts@0.2.3
和更高版本中添加环境变量后,首选@Alan Omars答案:为环境变量添加前缀REACT_APP_
,它将在构建时向客户端公开。docs以下是旧答案,它利用Webpack盲目地将
%PUBLIC_URL%
替换为index.html
这一事实:假设您使用的是
create-react-app
,这实际上非常简单:将以下内容添加到
public/index.html
:现在你可以从JavaScript引用主页了!只需通过
注:如果
package.json
中没有设置homePage
字段,则变量将为空字符串,因此我们必须对此进行补偿:pinkon5k4#
由于您使用的是
create-react-app
软件包,因此可以在package.json
中使用environment variable而不是"homepage":"/example-path"
:1.创建
.env
文件在这根你的项目.1.将
REACT_APP_HOME_PAGE='/example-path/'
添加到.env
文件1.现在,您可以在应用中通过
process.env.REACT_APP_HOME_PAGE
访问env变量,如下所示:o7jaxewo5#
我不知道您的路由器文件的位置在哪里,但您可以尝试将其作为json导入由
create-react-app
cli应用程序创建的src/index.js
文件,如下所示;或