Подтвердить что ты не робот

Firebase - размещение файлов в нескольких каталогах

Я пытаюсь организовать свой проект, чтобы сделать его более удобным. У меня есть большое количество html-шаблонов, и я вынужден помещать их в общий каталог. Я действительно хотел организовать его таким образом

public directory
  views
    index.html
    register.html
    terms.html
    privacy.html
    support.html
  stylesheets
    styles.css
  scripts
    script.js
    authentication.js

но вместо этого он выглядит как

public
  index.html
  register.html
  terms.html
  privacy.html
  support.html
  script.js
  authentication.js
  styles.css

Вот мой firebase.json файл

   {
  "firebase": "funmathgame",
  "public": "mathgame",
  "ignore": [
    "firebase.json",
    "**/.*",
    "**/node_modules/**"
  ]
}

Вот сообщение об ошибке, которое я получаю

Страница не найдена

Файл не существует и не существует index.html, найденного в текущем каталоге, или 404.html в корневом каталоге.

Почему я вижу это?

Возможно, вы использовали неверный каталог для своего приложения. Проверьте firebase.json и убедитесь, что каталог public указывает на каталог, содержащий файл index.html.

Вы также можете добавить 404.html в корень вашего сайта, чтобы заменить эту страницу на странице пользовательских ошибок.

Первая структура лучше, потому что она отделяет код. Эта структура работает всякий раз, когда я запускаю файлы в текстовом редакторе. Однако он не работает, когда я развертываю firebase.

В качестве примера я хотел бы ссылаться на мои таблицы стилей

<head>
  <title>Frequently Asked Questions</title>
  <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css'> 
  </link>
<link rel='stylesheet' href='../stylesheets/styles.css'></link>

В приведенной выше структуре каталогов я попал в каталог public/views. Я использую .. для перемещения одного каталога в общий каталог и затем пересылки в каталог stylesheets. Однако здесь мой файл index.html находится не в общедоступном каталоге, а в каталоге public/views.

Я посмотрел сайт Firebase, но до сих пор не могу найти никаких идей.

https://www.firebase.com/docs/hosting/guide/full-config.html

4b9b3361

Ответ 1

Если вы хотите иметь /views/index.html в адресной строке приложения, вы можете просто сделать перенаправление с /, добавив redirects на ваш firebase.json. Также похоже, что ваш атрибут public может быть неправильным. Поэтому измените файл firebase.json на:

{
  "firebase": "funmathgame",
  "public": "public",
  "ignore": [
    "firebase.json",
    "**/.*",
    "**/node_modules/**"
  ],
  "redirects": [
    {
      "source": "/",
      "destination": "/views/index.html",
      "type": 302
    }
  ]
}

Таким образом, любой пользователь, который переходит на https://funmathgame.firebaseapp.com/, будет перенаправлен на https://funmathgame.firebaseapp.com/views/index.html, и все относительные URL-адреса будут разрешены правильно.

Ответ 2

Это была трудная проблема. Когда вы развертываете Firebase, Firebase ищет файл index.html внутри вашего общего каталога. Этот общий каталог также известен как корневой каталог.

Я работал с приложением angular, и я просто использовал неправильные пути в своих частях. Это было довольно сложно.

Мне пришлось настроить контроллер angular, который ввел значение $document, чтобы получить заголовок страницы. Если заголовок страницы соответствует заголовку корневой страницы, я бы использовал ng-href, чтобы добавить каталог views в относительный URL-адрес.

В противном случае, если бы вы были в каталоге представлений и искали больше видов, он показывал бы путь, например views/views/page1.html. Вот почему у нас был бы другой ng-href условный для них.

Это то, что моя навигация выглядела как

<ul class='nav navbar-nav'>

        <li><a ng-href="{{ page == home ? 'views/help.html' : 'help.html' }}">Help</a></li>
        <li><a ng-href="{{ page == home ? 'views/achievements.html' : 'achievements.html' }}">Achievements</a></li>
        <li><a ng-href="{{ page == home ? 'views/scores.html' : 'scores.html' }}">Scores</a></li>
        <li><a ng-href="{{ page == home ? 'views/shop.html' : 'shop.html' }}">Shop</a></li>
        <li><a ng-href="{{ page == home ? 'views/faq.html' : 'faq.html' }}">FAQs</a></li>
        <li><a ng-href="{{ page == home ? 'views/related.html': 'related.html' }}">More Games</a></li>
</ul>

В конце концов, моя структура каталогов выглядела так:

public
  assets
    stylesheets
      styles.css
  views
    partials
      scripts.html
      header.html
      footer.html
    page1.html
    ...
  scripts
    controllers
    script1.js
    ...
  index.html

Можно также поместить индексный файл в каталог представлений, если вы изменили файл firebase.json.

{
    "firebase": "firebase-app",
    "public": "root/views",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
}

Вы просто изменяете ключевое слово public в приложении firebase. Это заняло много сил, потому что я забыл, что мне пришлось условно менять пути. Кроме того, чтобы вернуться в предыдущий каталог, вам нужно сделать что-то вроде ../

Ответ 3

Я думаю, что этот сайт может вам помочь: https://www.firebase.com/blog/2014-08-12-switching-to-firebase.html

В частности,

Так как Firebase импортирует один файл, а некоторые службы экспортируют несколько файлов, Ive создал удобный python script, который преобразует несколько файлов в один дезактивированный файл Firebase.