Хостинг 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/**"]
}
}