我有一个 Java Spring Boot 后端,并配置了 Tomcat 服务器。
我有一个 React 前端,使用 Vite 打包,“vite build”将所有内容发送到“dist”目录。
我将此“dist”目录移至“src/main/resources/static/”目录,以便由 Spring 自动提供服务。这是在 Docker 容器中运行的。
我可以打开我的主页。然而,前端并没有获取 Vite 打包的任何 CSS,尽管我可以在
dist
下的 dist/assets/*
文件夹中看到它,并且我的 dist/index.html
中到该 assets/index-${HASH}.css
文件的路径是正确。
这只发生在我的应用程序中来自index.html的子路由上。值得注意的是,当我刷新页面时,我得到一个“Whitelabel错误页面”。就像我的应用程序无法识别,例如,
https://localhost/route/routetwo
应该是从入口点index.html
开始的持久路径。
这个问题的奇怪之处在于,当在不同的 Docker 容器中运行
vite preview
时,一切都正常工作,这使得故障排除变得困难。我能够使用正确的 CSS 查看子路由,刷新页面没有问题,等等。
在“开发人员工具 -> 源”中,运行
index.html
时,我看到了子路由 vite preview
的内容,但在尝试将其作为 Spring 的一部分提供服务时却看不到。这是关于 Spring 如何与我的 vite 构建交互的问题。
有什么想法吗?
我尝试过很多事情,包括但不限于:
vite preview
容器中拉出,将其粘贴到我的后端 src/main/resources/static
目录中并以这种方式提供服务,而不是使用每个 Docker 容器动态构建。没有骰子,仍然没有找到我的/assets/index-${HASH}.css
assets/*
从资产目录中移出并移至与 src/main/resources/static/index.html
相同的目录中,更改 index.html
中的路径。没有结果。vite preview
,另一个使用 Spring 静态资源服务。也有类似的问题。如果我没有经过身份验证,我会收到一个“whitelabel”/自定义错误页面。原因是我的 Spring Boot 安全配置
PUBLIC_URLS
丢失了:
/assets/**
,最终导致 Vite 无法加载 .js 文件。