Vaadin 14生产模式和Safari问题



我最近将我的应用程序切换到Vaadin 14原生NPM(非兼容性模式(和生产模式。Vaadin版本为14.3.7。这是一个使用Gradle打包为可执行.war文件的Spring Boot应用程序。我正在使用Vaadin-Gradle插件。

一切都很好,除了Safari(iOS+Mac(中的应用程序不可用。以下错误可以在Mac上看到:

TypeError: 'text/html' is not a valid JavaScript MIME type.

我发现消息来源说ES6模块可能会在Safari上导致这个错误,但我认为Vaadin默认情况下会在生产模式下转换到ES5。

我能做些什么让Safari也能正常工作?

更新build.gradle文件中的一些相关部分:

plugins {
...
id 'com.vaadin' version '0.8.0'
}
ext{
...
set('vaadinVersion', "14.3.7")
}
dependencies {
...
implementation('com.vaadin:vaadin-spring-boot-starter') {
["com.vaadin.webjar", "org.webjars.bowergithub.insites",
"org.webjars.bowergithub.polymer", "org.webjars.bowergithub.polymerelements",
"org.webjars.bowergithub.vaadin", "org.webjars.bowergithub.webcomponents"]
.forEach { group -> exclude(group: group) }
}
...
}
vaadin {
optimizeBundle = true
pnpmEnable = true
productionMode = true
}

它是由以下因素组合引起的:

  • 该应用程序由Apache服务器引导,该服务器在未登录时重定向到SSO
  • Vaadin将捆绑包加载为ES6模块
  • Safari在加载ES6模块时不发送cookie,添加crossorigin="use-credentials"时除外
  • Vaadin只添加了crossorigin,而没有添加crossorigin="use-credentials"(由于它们正式支持Safari,因此可以认为这是一个错误(

有关更多信息,请参阅https://jakearchibald.com/2017/es-modules-in-browsers/,https://stackoverflow.com/a/52559612/775138以及John Meinken的评论。

我们通过将Apache配置为不保护捆绑包的路径来解决这个问题。

最新更新