Как сделать взаимозависимые сценарии доступными для Service Worker в Rails 6? - PullRequest
0 голосов
/ 12 февраля 2020

В настоящее время я пытаюсь преобразовать мою "полную JS" PWA (из этого курса Удеми ) в PWA на Rails 6. Он использует уведомления indexedDB (idb), SyncManager и Pu sh и работает отлично. Это простое приложение, в котором вы можете создавать посты с изображением (из вашей камеры или ваших файлов), заголовком и местоположением.

Я пробовал много способов реализовать функции PWA, будь то непосредственно в публикации c папка или через контроллер (см. методы Джона Битти ), или с pwa-rails gem или workbox . Все они приводят к одной и той же проблеме: мой SW не может получить доступ к нужным сценариям, особенно к тому, который управляет indexedDB.

Давайте возьмем версию моего приложения "SW controller" (см. 2-й метод Дж. Битти):

  1. Структура
    • Мой ServiceWorkerController имеет 3 метода: service_worker , манифест и в автономном режиме, и я получил следующие подходящие маршруты:
  get '/offline.html', to: 'service_worker#offline'
  get '/manifest.json', to: 'service_worker#manifest'
  get '/service-worker.js', to: 'service_worker#service_worker'
  • Мой service_worker. js .erb находится в app / views / service_worker вместе с мой манифест. json .erb и офлайн. html
  • Все мои скрипты находятся в app / javascript / packs

  • JS
  • javascript / application. js: импортирует все остальные сценарии, регистрирует ПО и управляет системными уведомлениями (не pu sh) уведомления), например приглашение «установить это приложение на домашнюю страницу»
  • javascript / polyfills / index. js: импортирует пакет whatwg-fetch (fetch pollyfill) - и используется для импорта обещать также polyfill, пока я не понял, что мне не нужно (ср. core js)
  • javascript / feed. js - это место, где я манипулирую DOM и управляю syn c процесс, но есть также ie мои запасные варианты для браузеров, которые не поддерживают одну или многие функции PWA, которые я использую.
  • javascript / utility. js: импортирует пакет idb Джейка Арчибальда и имеет несколько функций, позволяющих выполнять чтение / запись / удаление данных в indexedDB браузера, а также несколько функций преобразования (например, base64 url ​​в blob).

Я пробовал много-много способов сделать мои скрипты доступными для моего ПО, потому что ему нужен доступ к файлу моей утилиты. js и так же к пакету idb, но единственный успешный импорт, который мне удалось сделать, это:

importScripts("<%= asset_pack_path('app.js') %>")

Это идет не так, потому что он импортирует все, включая сценарии, которые манипулируют де Дом. А поскольку ПО не имеет доступа к DOM, происходит сбой (с сообщениями об ошибках типа «окно не определено»). Если я пытаюсь импортировать только утилиту. js, она не работает, говорит, что не может найти скрипт ...

Был ли кто-нибудь в состоянии построить PWA с Rails 6 (с веб-упаковщиком и turbolinks) который использует, помимо прочего, indexedDB, а не базовый c предварительный кеширование некоторых активов? Кажется, я не могу найти какой-либо ресурс по этому вопросу.

Заранее спасибо за ваше время!

...