При перезаписи отображается пустая страница. Приложение Flutter, размещенное на хостинге Firebase

У меня возникла проблема с хостингом Firebase моего приложения Flutter. Я настроил хостинг Firebase, как описано в документации. Когда я развертываю проект с помощью этого файла firebase.json, он работает так, как задумано.

...
"hosting": {
    "public": "build/web",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "frameworksBackend": {
      "region": "europe-west1"
    }
...

Чтобы сделать URL-адреса типа <Hosting-Domain>/download доступными, мне нужно добавить перезапись, например:

...
"hosting": {
    "public": "build/web",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "frameworksBackend": {
      "region": "europe-west1"
    },
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
...

Когда я развертываю проект с перезаписью, он отлично работает, эмулируя локально с помощью Firebase Emulator Suite, но когда я открываю веб-сайт онлайн, отображается пустая страница. Консоль отображает следующие сообщения:

> Rejecting promise with error: FormatException: SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
> Uncaught (in promise) null

FormatException, по-видимому, относится к моему файлу Index.html, который выглядит следующим образом:

<!DOCTYPE html>
<html>
<head>
  <!--
    If you are serving your web app in a path other than the root, change the
    href value below to reflect the base path you are serving from.

    The path provided below has to start and end with a slash "/" in order for
    it to work correctly.

    For more details:
    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base

    This is a placeholder for base href that will be replaced by the value of
    the `--base-href` argument provided to `flutter build`.
  -->
  <base href = "/">

  <meta charset = "UTF-8">
  <meta content = "IE=Edge" http-equiv = "X-UA-Compatible">
  <meta name = "description" content = "A new Flutter project.">

  <!-- iOS meta tags & icons -->
  <meta name = "apple-mobile-web-app-capable" content = "yes">
  <meta name = "apple-mobile-web-app-status-bar-style" content = "black">
  <meta name = "apple-mobile-web-app-title" content = "flutter_application_2">
  <link rel = "apple-touch-icon" href = "icons/Icon-192.png">

  <!-- Favicon -->
  <link rel = "icon" type = "image/png" href = "favicon.png"/>

  <title>flutter_application_2</title>
  <link rel = "manifest" href = "manifest.json">
</head>
<body>
  <script type = "module">
    // Import the functions you need from the SDKs you need
    import { initializeApp } from "https://www.gstatic.com/firebasejs/10.12.2/firebase-app.js";
    import { getAnalytics } from "https://www.gstatic.com/firebasejs/10.12.2/firebase-analytics.js";
    // TODO: Add SDKs for Firebase products that you want to use
    // https://firebase.google.com/docs/web/setup#available-libraries
  
    // Your web app's Firebase configuration
    // For Firebase JS SDK v7.20.0 and later, measurementId is optional
    const firebaseConfig = {
      // My Firebase-Config
    };
  
    // Initialize Firebase
    const app = initializeApp(firebaseConfig);
    const analytics = getAnalytics(app);
  </script>
  <script src = "flutter_bootstrap.js" async></script>
</body>
</html>

Способы, которыми я пытался исправить эту ошибку:

  1. Изменен базовый href в Index.html на "$FLUTTER_BASE_HREF" или “./”.
  2. Изменено "public": "build/web" в firebase.json на "source": "." и подобные комбинации.
  3. Настройте новый проект шаг за шагом (добавление зависимостей, исходного кода и т. д.), это не удалось на том же этапе, что и этот.
  4. Изменен оператор перезаписи в firebase.json (другой оператор, Redirect,…): необходима перезапись, сбой только при перезаписи.
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема затрагивала инструменты Firebase v13.11.3 и v13.11.4. Обновление до версии 13.12.0 (npm update -g firebase-tools) устранило эту проблему.

Другие вопросы по теме