如何在 spring 引导服务的 create-react-app 中使用本地字体?
How to use local fonts in a create-react-app that's served by spring boot?
我正在开发 webapp,spring 在后端启动并在前端做出反应(我使用 create-react-app 来具体说明)。现在我认为最简单的解决方案是让 spring 为前端应用程序提供服务,无论何时出现根级请求,甚至请求任何未被我的后端 API 占用的路由。
为了集成本地字体,我在前端的 index.css
中声明了字体:
@font-face {
font-family: 'TheFont';
src: local('TheFont'), url(./fonts/TheFont/TheFont.ttf) format('truetype');
}
字体文件(在我的项目中)位于 src/fonts
。 运行 它在开发服务器 (npm start
) 上一切正常。但是当我构建应用程序并将其复制到我的 spring 启动后端中的 resources/static/
时,字体不会显示,而其他一切都按预期工作。
最令人困惑的是,当我在浏览器中搜索网站的源代码并按照 link 到呈现的 css 然后 url 到字体文件(看起来像 ../../static/media/TheFont.9f30b69a.ttf
)并直接通过 localhost:8080/static/media/TheFont.9f30b69a.ttf
请求该文件,我得到了字体文件!
渲染出来的css文件的路径是static/css/main.767343db.css
,所以字体的相对路径应该是可以的。
顺便说一句,我在 React 应用程序的 package.json
中设置了 "homepage" : "."
以获取相对于 index.html
文件的资产路径(正如我阅读的许多帖子和示例中所推荐的那样)。
我做错了什么?这可能是由于我使用 spring 启动后端应用程序为前端服务造成的吗?
感谢您的帮助!
这个问题现在比较老了,当时没有人回答。它有 440 次浏览,看来很多人都遇到了类似的问题。我在过去解决了这个问题,并想让你知道如何做,所以滞留在这里的每个人都有一些见识:
1) index.css
我一直按照问题中的描述使用 index.css
,因此字体定义和字体文件路径如下所示:
@font-face {
font-family: 'TheFont';
src: local('TheFont'), url(./fonts/TheFont/TheFont.ttf) format('truetype');
}
2) package.json
然后,在 package.json
中,我根本没有使用 homepage
属性。开发服务器无论如何都会忽略它,后来,当我需要为我的应用程序在生产中使用不同的路径时,我将 homepage
属性 设置为 /mypath/
而没有玩 .
获取相对路径或其他东西,它只是没有它。
3)Spring静态资源
我刚刚将我的 React 应用程序的构建复制到我的 Spring 项目的 src/main/resources/static
,所以 index.html
的路径是 src/main/resources/static/index.html
并且字体最终在 src/main/resources/static/static/media/TheFont.ttf
(两个 static
文件夹,因为一个来自 Spring,另一个是客户端构建结构的一部分)。
顺便说一下,步骤 3) 可以很好地通过 Maven 复制资源插件自动执行 - Gradle 当然也有类似的东西。
我希望这也能帮助一些面临这个问题的人。
我正在开发 webapp,spring 在后端启动并在前端做出反应(我使用 create-react-app 来具体说明)。现在我认为最简单的解决方案是让 spring 为前端应用程序提供服务,无论何时出现根级请求,甚至请求任何未被我的后端 API 占用的路由。
为了集成本地字体,我在前端的 index.css
中声明了字体:
@font-face {
font-family: 'TheFont';
src: local('TheFont'), url(./fonts/TheFont/TheFont.ttf) format('truetype');
}
字体文件(在我的项目中)位于 src/fonts
。 运行 它在开发服务器 (npm start
) 上一切正常。但是当我构建应用程序并将其复制到我的 spring 启动后端中的 resources/static/
时,字体不会显示,而其他一切都按预期工作。
最令人困惑的是,当我在浏览器中搜索网站的源代码并按照 link 到呈现的 css 然后 url 到字体文件(看起来像 ../../static/media/TheFont.9f30b69a.ttf
)并直接通过 localhost:8080/static/media/TheFont.9f30b69a.ttf
请求该文件,我得到了字体文件!
渲染出来的css文件的路径是static/css/main.767343db.css
,所以字体的相对路径应该是可以的。
顺便说一句,我在 React 应用程序的 package.json
中设置了 "homepage" : "."
以获取相对于 index.html
文件的资产路径(正如我阅读的许多帖子和示例中所推荐的那样)。
我做错了什么?这可能是由于我使用 spring 启动后端应用程序为前端服务造成的吗?
感谢您的帮助!
这个问题现在比较老了,当时没有人回答。它有 440 次浏览,看来很多人都遇到了类似的问题。我在过去解决了这个问题,并想让你知道如何做,所以滞留在这里的每个人都有一些见识:
1) index.css
我一直按照问题中的描述使用 index.css
,因此字体定义和字体文件路径如下所示:
@font-face {
font-family: 'TheFont';
src: local('TheFont'), url(./fonts/TheFont/TheFont.ttf) format('truetype');
}
2) package.json
然后,在 package.json
中,我根本没有使用 homepage
属性。开发服务器无论如何都会忽略它,后来,当我需要为我的应用程序在生产中使用不同的路径时,我将 homepage
属性 设置为 /mypath/
而没有玩 .
获取相对路径或其他东西,它只是没有它。
3)Spring静态资源
我刚刚将我的 React 应用程序的构建复制到我的 Spring 项目的 src/main/resources/static
,所以 index.html
的路径是 src/main/resources/static/index.html
并且字体最终在 src/main/resources/static/static/media/TheFont.ttf
(两个 static
文件夹,因为一个来自 Spring,另一个是客户端构建结构的一部分)。
顺便说一下,步骤 3) 可以很好地通过 Maven 复制资源插件自动执行 - Gradle 当然也有类似的东西。
我希望这也能帮助一些面临这个问题的人。