gpt4 book ai didi

reactjs - Firebase 托管上的单页应用程序上的深层路由出现问题

转载 作者:行者123 更新时间:2023-12-03 13:23:38 25 4
gpt4 key购买 nike

(下面更新了更多信息)

我们有一个基于 React 的单页 Web 应用,位于 Firebase 托管上。到目前为止,我们一直在使用基于哈希的路由(例如 mysite.com/#/path/to/content )。我们引入了 React Router,它允许我们拥有更漂亮的 URL(例如 mysite.com/path/to/content ),但现在当我们直接导航到深层路由时,应用程序不会加载。详情如下:

使用 React Router 需要我们在 Firebase Hosting 中使用 URL 重写。说明非常简单 - 似乎您需要做的就是这样:

"rewrites": [ 
{
"source": "**",
"destination": "/index.html"
}
]

...在 firebase.json 内文件。事实上,我们完整的firebase.json文件内容如下:

{
"firebase": "",
"public": "dist",
"rules": "rules.json",
"ignore": [
"firebase.json",
"**/.*",
"**/*.map",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}

没有什么太复杂的(如果您想知道为什么 firebase deploy -f 参数为空,我们正在构建脚本中执行 firebase )。链接到rules.json文件更简单:

{
"rules":{
".write":"true",
".read":"true"
}
}

当我通过访问基本 URL 加载应用程序并开始导航时,一切都很好。如果我直接进入一层深度的路线(例如 mysite.com/path ),那也有效。

但是

如果我直接转到深层路由,甚至转到带有尾部斜杠的顶级路由(例如 mysite.com/path/mysite.com/path/to/content ),则应用程序不会加载。

具体来说,发生的是 index.html页面加载,然后浏览器去加载我们的 webpack 创建的bundle.js 文件,该文件在 index.html 中引用。 ,但 Firebase Hosting 为该 JS 文件返回的是 index.html 文件的内容。那么,可以预见的是,我们在浏览器控制台中看到的是这个错误:

Uncaught SyntaxError: Unexpected token <

...在“捆绑文件”的第 1 行。如果我在 Chrome 的开发工具中查看捆绑文件的内容,捆绑文件的第一行实际上是这样的:

<!doctype html>

...然后是 index.html 中的其余 HTML 部分文件。

似乎发生的事情是 Firebase URL 重写规则说“哦,您正在尝试引用 JS 文件 - 我发现我应该为所有内容返回 index.html 的内容,所以这里你去”。但情况不可能一直如此,否则该网站在任何情况下都无法运行。那么,为什么如果我从站点根目录开始它可以工作,但如果我将深层 URL 粘贴到应用程序则它会中断?我的想法为零。

如果有帮助,这就是我的 index.html文件引用捆绑文件:

<script src="bundle.ce843ef7a2ae68e9e319.js"></script></body>

所以这似乎是 Firebase 托管的问题,但我也可以看到,也许我在某种程度上不理解 React Router,所以我以某种方式用客户端代码搞砸了事情它迫使服务器返回错误的东西。

我希望这是我们缺少的一些愚蠢的配置。如有任何帮助,我们将不胜感激!

谢谢!

更新:我精简了我们的应用程序,使其只返回“hello, world”,这绕过了所有基于 React 的东西,包括 React Router,并且问题仍然存在,所以我不再认为这有任何关系与 React-Router 一起,尽管我认为这仍然有很小的可能与 React 有关。

最佳答案

我收到了 Firebase Hosting 的回复。显然,索引文件中引用的bundle.js 文件前面需要有一个斜杠,以使其成为绝对路径。所以这个:

<script src="/bundle.js"></script>

...而不是这个:

<script src="bundle.js"></script>

如果其他人犯同样的愚蠢错误,我希望这有用。

关于reactjs - Firebase 托管上的单页应用程序上的深层路由出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com