Веб-приложениям, которые запущены круглосуточно и никогда не закрываются, нужен дополнительный пинок о том, что релизнулась новая версия и неплохо бы на неё обновиться. Вот один из велосипедов для решения такой задачи.
Вебпак генерирует
asset-manifest.json (плагин webpack-assets-manifest) примерно следующего содержания:{
"main.css": "static/css/main.ea89508d.css",
"main.css.map": "static/css/main.ea89508d.css.map",
"main.js": "static/js/main.ea1dcc18.js",
"main.js.map": "static/js/main.ea1dcc18.js.map"
}Тут есть уникальные хеши билда и это можно использовать, чтобы понять, что вышла новая версия. На старте приложения фетчим
asset_manifest.json и сохраняем значение. Дальше в setInterval фетчим и сравниваем с сохранённым значением. Если появились расхождения, то можно рестартить или показывать уведомление — смотря, что больше подходит.const rsp = await fetch(
'/_asset-manifest.json',
{cache: 'no-store'}
);
const data = await rsp.text();
if (idle && data !== manifest) {
window.location.reload(true)
}
У меня nginx рероутит
/_asset-manifest.json на /asset-manifest.json, чтобы избежать конфликтов с serviceWorker offline cache — пути, начинающиеся с подчёркивания, блеклистятся.