иллюстрация к статье как управлять версиями PWA приложения

Основной задачей PWA-технологии является возможность использования такого приложения на любом устройстве пользователя в виде, максимально приближенном к нативному приложению. В контексте приближения к нативному приложению возникла идея о возможном версионировании приложения в рамках одного домена: использовать версию приложения в качестве адреса для перехода к конечной папке с билдом. Было бы неплохо переключаться между различными версиями одного приложения для обратной совместимости с различными сервисами биома.

Среда

  1. Билд приложения: webpack + create-react-app + pwa plugin + react-browser-router
  2. Nginx
  3. Браузер Chrome

Что делали

  • PWA приложение:
  1. Окружение: добавили константу в файл .env PUBLIC_URL=/<app_version>
  2. manifest.json: изменили start_url, src у логотипов приложения
  3. serviceWorkerRegistration.js: добавили scope в метод регистрации SW 
    {scope: `${process.env.PUBLIC_URL}/`}
  4. index.jsx: изменили настройки у BrowserRouter приложения basename={PUBLIC_URL}
  • Nginx:
  1. Реализована структура директорий вида /var/www/pwa/build-${app_version}
  2. указан root для nginx /var/www/pwa/
  3. Подключена автоиндексация

Что вышло

Идея сама по себе хороша, но реализация на текущей среде столкнулась с рядом проблем. Технически реализовать хранилище получилось, но вот пользоваться им оказалось довольно неудобно:

  • В PWA-приложениях была разработана отдельная страница с функционалом установки приложения:
  1. при переходе по ссылке вида <domain>/<build_version>/install nginx возвращал ошибку 500
  2. изменили настройки location, прописали поведение непосредственно для <domain>/<build_version>/install - получили ошибку 404
  3. внутренний роутинг PWA начинал работать только после изначального перехода на ссылку вида <domain>/<build_version>
  • Установка различных версий PWA на устройство. 
    Установка одной версии PWA-приложения блокирует возможность установки других версий, билды которых хранятся на этом же домене: браузер может идентифицировать и открыть только одно PWA-приложение на устройстве по одному домену. Для установки другой версии потребуется удаление уже установленной.

Итог

Создание хранилища версий PWA-приложения на одном домене с возможностью их установки и использования упирается в возможности nginx, браузера и SPA-архитектуры, сделать что-то похожее на систему управления версиями нативного Android \ Ios приложения не вышло. Для стабильной работы, обновления и дебага PWA-приложение требует отдельный домен с размещением на нем билда последней версии.

 

 

 Также читайте: