Основной задачей PWA-технологии является возможность использования такого приложения на любом устройстве пользователя в виде, максимально приближенном к нативному приложению. В контексте приближения к нативному приложению возникла идея о возможном версионировании приложения в рамках одного домена: использовать версию приложения в качестве адреса для перехода к конечной папке с билдом. Было бы неплохо переключаться между различными версиями одного приложения для обратной совместимости с различными сервисами биома.
Среда
- Билд приложения: webpack + create-react-app + pwa plugin + react-browser-router
- Nginx
- Браузер Chrome
Что делали
- PWA приложение:
- Окружение: добавили константу в файл .env
PUBLIC_URL=/<app_version>
- manifest.json: изменили start_url, src у логотипов приложения
- serviceWorkerRegistration.js: добавили scope в метод регистрации SW
{scope: `${process.env.PUBLIC_URL}/`}
- index.jsx: изменили настройки у BrowserRouter приложения
basename={PUBLIC_URL}
- Nginx:
- Реализована структура директорий вида /var/www/pwa/build-${app_version}
- указан root для nginx /var/www/pwa/
- Подключена автоиндексация
Что вышло
Идея сама по себе хороша, но реализация на текущей среде столкнулась с рядом проблем. Технически реализовать хранилище получилось, но вот пользоваться им оказалось довольно неудобно:
- В PWA-приложениях была разработана отдельная страница с функционалом установки приложения:
- при переходе по ссылке вида <domain>/<build_version>/install nginx возвращал ошибку 500
- изменили настройки location, прописали поведение непосредственно для <domain>/<build_version>/install - получили ошибку 404
- внутренний роутинг PWA начинал работать только после изначального перехода на ссылку вида <domain>/<build_version>
- Установка различных версий PWA на устройство.
Установка одной версии PWA-приложения блокирует возможность установки других версий, билды которых хранятся на этом же домене: браузер может идентифицировать и открыть только одно PWA-приложение на устройстве по одному домену. Для установки другой версии потребуется удаление уже установленной.
Итог
Создание хранилища версий PWA-приложения на одном домене с возможностью их установки и использования упирается в возможности nginx, браузера и SPA-архитектуры, сделать что-то похожее на систему управления версиями нативного Android \ Ios приложения не вышло. Для стабильной работы, обновления и дебага PWA-приложение требует отдельный домен с размещением на нем билда последней версии.
Также читайте: