Производственный режим Vaadin 14 и проблема с Safari

Недавно я переключил свое приложение на собственный NPM Vaadin 14 (режим несовместимости) и рабочий режим. Версия Vaadin - 14.3.7. Это приложение Spring Boot, упакованное в виде исполняемого файла .war с использованием Gradle. Я использую плагин 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
}

person herman    schedule 06.10.2020    source источник
comment
Вы можете поделиться своим pom.xml?   -  person ollitietavainen    schedule 06.10.2020
comment
@ollitietavainen Я использую Gradle, поделюсь некоторыми важными частями   -  person herman    schedule 06.10.2020
comment
У вас есть плагин war?   -  person ollitietavainen    schedule 06.10.2020
comment
@ollitietavainen да, плагин war включен   -  person herman    schedule 06.10.2020
comment
вероятно, стоит упомянуть и об этом в исходном вопросе.   -  person ollitietavainen    schedule 07.10.2020
comment
@ollitietavainen Сделано, и тоже предоставил ответ.   -  person herman    schedule 07.10.2020


Ответы (1)


Оказалось, что это было вызвано сочетанием следующих факторов:

  • Приложение обслуживается сервером Apache, который перенаправляет на SSO, когда не вошел в систему.
  • Ваадин загружает пакет как модуль ES6.
  • Safari не отправляет файлы cookie при загрузке модулей ES6, за исключением случаев, когда добавляется 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 так, чтобы не защищать путь к пакету.

person herman    schedule 07.10.2020