Хостинг Firebase: как предотвратить кэширование для индекса.html СПА

Я принимаю СПА на firebase, где почти все пути переписываются на index.html. Я использую перебор кэша на основе хэша webpack, поэтому я хочу всегда предотвращать кэширование моего index.html но не любые другие файлы. Мне на удивление трудно это сделать. В частности, мой макет файла выглядит следующим образом

/
├── index.html
├── login.html
├── js
│   ├── login.ba22ef2579d744b26c65.bundle.js
│   └── main.6d0ef60e45ae7a11063c.bundle.js
└── public
    └── favicon-16x16.ico

Я наивно начал с "sources": "index.html" прежде чем читать эту цитату из документов.

каждое определение должно иметь соответствующий ключ источника против исходного пути запроса независимо от каких-либо правил перезаписи с помощью Глоб нотации.

Ok, поэтому вместо простого глобуса, который указывает файлы, на которые я хочу эти заголовки, я думаю, мне нужен один на путях. Поскольку большинство путей перенаправляются в index.html, мне нужен глобус, который исключает все пути, на которые я не хочу ставить эти заголовки.

Для справки, мой firebase.json раздел хостинга выглядит так:

{
  "hosting": {
    "public": "dist",
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ],
    "cleanUrls": true,
    "trailingSlash": false,
    "headers": [
      {
        "source": <<<WHAT-GOES-HERE?>>>,
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          },
          {
            "key": "Pragma",
            "value": "no-cache"
          },
          {
            "key": "Expires",
            "value": "0"
          }
        ]
      }
    ]
  }
}

так, чтобы дать некоторые примеры, которые перенаправляют на индекс.html и не должен кэшироваться

mysite.com  
mysite.com/  
mysite.com/foo/bar/baz  
mysite.com/index.html 

Примечание: я мог бы жить, если бы последний был кэширован, так как он не используется на практике.

и вещи, которые не перенаправляются на индекс.html и не должен кэшироваться

**/*.* (ideally excluding index.html)
mysite.com/login  

самое близкое, что я получил самостоятельно, это **/!(login|*.*) который работает почти для всего перечисленного выше, но необъяснимо не работает на mysite.com или mysite.com/. Эти 2 страницы не сопоставление с этим шаром, и я не могу понять, почему.

1 ответов


вот конфигурация, которую я использую. Логика заключается в использовании кэша для всех статических файлов, таких как images, css, js etc.. Для всех остальных-я.e "source": "/**" установить кэш, а не кэш. так что для всех других файлов, возможно,example.com, example.com/index.html, example.com/about-us, example.com/about-us.html кэш не будет применен.

{
  "hosting": {
    "public": "dist",
    "headers": [
      {
        "source": "/**",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          }
        ]
      },
      {
        "source":
          "**/*.@(jpg|jpeg|gif|png|svg|webp|js|css|eot|otf|ttf|ttc|woff|font.css)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=604800"
          }
        ]
      }
    ],
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"]
  }
}