30.04.2024 г.
Динамичен manifest.json
Ако желаете потребителите на вашето уеб приложение да го „инсталират“ на своите устройства, достатъчно е да попълните manifest.json
файла. Има широка поддръжка от всякакви браузъри и операционни системи и е елементарно да се направи, за да се пропуска.
Поддържам едно Vue приложение, което комуникира с SaaS система. Приложението се генерира почти статично, без да има beck-end зад себе си и има една входна точка, но в зависимост от сайта, които я зарежда, в LocaleStorage-а записвам променлива, която съдържа идентификатор на този сайт. Приложението си има изграден manifest.json
, но с времето се наложи да го персонализирам за всеки един сайт.
Динамичното зареждане на manifest.json
файла трябва да стане при клиента (в браузъра). Vue & Vue Router ги изключихме от сметките, защото манифеста трябва да е наличен, дори и техните 'машинки' да не заработят. Така че, прехвърлихме всичко в index.html
файла на приложението.
Написах малка Node конзола, която преминава през активните бази и генерира статично manifest.siteId.json
файл за всеки един сайт в определена папка. След това добавих един малък скрипт в index.html
файла, който зарежда този файл и го добавя към document.head
.
<!-- index.html -->
<script>
const siteId = localStorage.getItem("siteId");
const manifestPath = `/manifests/manifest.${siteId || ""}.json`;
fetch(manifestPath)
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(() => {
const link = document.createElement('link');
link.rel = "manifest";
link.href = manifestPath;
document.head.appendChild(link);
})
.catch(() => {
const link = document.createElement('link');
link.rel = "manifest";
link.href = '/manifests/manifest.json';
document.head.appendChild(link);
});
</script>
Защо fetch?
Това е един много добър въпрос. При генерирането на manifest.siteId.json
файловете, може да възникне ситуация, при която няма да съществува такъв файл. Понеже JavaScript-а, не може да прави проверка за файл на сървъра - правя fetch заявка за него. Ако заявката не сработи, тогава зареждам manifest.json
файл с базовите описания.
Ако имате мнение или въпроси за статията, не се колебайте да ги споделите.
Nitro, i18n and Dev Proxy
Когато ползвате Nuxt, нормално е да използвате и Nitro, но понякога това не влиза в сценария, който са Ви подготвили. За API заявките отговаря друг beck-end сървър и за да може да си разработвате локално приложението, трябва да се настрои прокси.
Премахване на наклонената черта от адресната линия в Nuxt
Всяка страница във Вашия уеб сайт трябва да е с уникално съдържание. Ако имате втора страница с същото съдържание, то тежестта на информацията за търсачките се разделя между двете и това силно намалява шансовете им за по-ранно показване в резултатите от търсенето.