试用新的 JHipster 8.1.0。我在以前的版本中成功使用了 PrimeNG 组件。在新的 JHipster 中,PrimeNG 组件似乎可以正常工作,但图标(primeicons)不会显示在生产环境中的浏览器中。
例如:
npm i primeng
npm i primeicons
npm i @angular/[email protected]
npm i @angular/[email protected]
vendor.scss
:@import 'primeng/resources/primeng.min.css';
@import 'primeng/resources/themes/saga-blue/theme.css';
@import 'primeicons/primeicons.css';
home.component.ts
中:
import { TabViewModule } from 'primeng/tabview';
@Component
部分,将 TabViewModule
添加到导入中home.component.html
HTML 模板中,在顶部附近添加:<p-tabView>
<p-tabPanel header="Details" leftIcon="pi pi-id-card">In-depth details</p-tabPanel>
<p-tabPanel header="Notes" leftIcon="pi pi-comment">Some lovely notes</p-tabPanel>
<p-tabPanel header="Information" leftIcon="pi pi-info-circle">Additional information</p-tabPanel>
</p-tabView>
在开发中运行应用程序(IntelliJ 2023.3.2、Java 21、Gradle 8.5、Node 18.19.0、Firefox 121.0.1),一切都显示正确,并且看起来相当不错。
现在在生产中尝试一下:
./gradlew -Pprod clean bootJar
testapp.jar
java -jar testapp.jar
http://localhost:8080
在生产中,PrimeNG 选项卡仍按预期工作 但是 图标不显示。此外,在浏览器控制台中我看到以下错误:
GET http://localhost:8080/primeicons.ba3f916dfb64be8c.woff2 [HTTP/1.1 401 Unauthorized 8ms]
downloadable font: download failed (font-family: "primeicons" style:normal weight:400 stretch:100 src index:1): status=2147746065 source: http://localhost:8080/primeicons.ba3f916dfb64be8c.woff2
GET http://localhost:8080/primeicons.f8b9e8a4e401b603.woff [HTTP/1.1 401 Unauthorized 8ms]
downloadable font: download failed (font-family: "primeicons" style:normal weight:400 stretch:100 src index:2): status=2147746065 source: http://localhost:8080/primeicons.f8b9e8a4e401b603.woff
GET http://localhost:8080/primeicons.0112589c5695a9ed.ttf [HTTP/1.1 401 Unauthorized 9ms]
downloadable font: download failed (font-family: "primeicons" style:normal weight:400 stretch:100 src index:3): status=2147746065 source: http://localhost:8080/primeicons.0112589c5695a9ed.ttf
downloadable font: no supported format found (font-family: "primeicons" style:normal weight:400 stretch:100 src index:5) source: (end of source list)
在以前版本的 JHipster(7.9.3 及更早版本)和开发中,一切都工作正常,所以我猜测要么我错过了一些东西,做了一些愚蠢的事情,要么这是新 JHipster 中的资源捆绑问题。
有什么想法吗?
天哪,通心粉!我有答案了。
JHipster 项目中的优秀人员已经提高了安全性,并锁定了所有“不”属于其代码库的内容。要查看 PrimeNG
primeicons
,请打开 SecurityConfiguration.java
,找到 authorizeHttpRequests()
部分(在我的代码中,位于第 60 行左右),然后在 .requestMatchers
中添加以下内容:.requestMatchers(mvc.pattern("/*.tff"), mvc.pattern("/*.woff"), mvc.pattern("/*.woff2")).permitAll()
问题解决了。