详情
我正在写一个电子邀请应用程序,它使用react-router-dom作为路由,我将“renderer”文件夹部署到vercel,沿着vercel.json作为根目录。
现在,当我从根域开始导航时,应用程序工作正常,但一旦我将URL(例如https://example.com/app/transfers/id)复制到另一个选项卡,它只显示一个空白屏幕。
调查控制台,我可以看到它无法获得由rollup生成的捆绑js文件。
x1c 0d1x的数据
然后,当我检查出“源”选项卡,我可以看到这是因为它试图访问资产文件夹使用相对路径:
我知道这是问题所在,因为当我在开发人员工具中启用Local overrides,并手动删除路径前面的“.”时,一切都正常。
的
这是有意义的,因为我们应该在:https://example.com/assets/bundle.js
而不是:https://example.com/app/transfers/id/assets/bundle.js
处查找生成的bundle
我知道这可以很容易地通过切换到HashRouter而不是Browser Router来解决,事实上,我有代码可以在HashRouter和BrowserRouter之间切换,基于您是否在浏览器中运行电子应用程序。
但如果可能的话,我希望避免在浏览器中使用HashRouter。
我尝试过:
我知道vite基本路径配置选项。将其设置为/
仍然不会产生好的结果(捆绑的html保持不变,无论我传递给base
什么):
那么有没有其他的方法来解决这个问题,或者有没有一种方法来确保这些束总是在它们的绝对路径上被查找?
1条答案
按热度按时间u2nhd7ah1#
解决这个问题的方法就是在我的html
head
标签中放置一个base
标签,如下所示:字符串
根据MDN(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base):
HTML元素指定用于文档中所有相对URL的基本URL。一个文档中只能有一个元素。
脚本可以使用Node. baseURI访问文档所使用的基本URL。如果文档没有元素,则baseURI默认为location. href。
对于这种情况,这是一个完美的解决方案,因为问题是vite/rollup为我生成的JS和css包生成相对URL。
干杯