Service Worker обслуживается с другого порта на локальной машине

Я пытаюсь разработать PWA для наших сайтов. В производстве и на стадии подготовки мы обслуживаем все из одного домена. Однако при разработке на локальной машине мы обслуживаем HTML с одного порта, используя сервер Django, например

http://localhost:8000

И ассеты (в т.ч. JS) с использованием сервера Grunt с другого порта:

http://localhost:8001

Проблема в том, что сфера действия сервис-воркеров поэтому ограничена только активами, что бесполезно, я хочу кэшировать страницы в автономном режиме в источнике с 8000 портами.

Мне удалось обойти это, выбрав работника службы в качестве пользовательского представления в Django:

# urls.py

url(r'^(?P<scope>.*)sw\.js', service_worker_handler)

# views.py

def service_worker_handler(request, scope='/'):
    return HttpResponse(render_to_string('assets/sw.js', {
        'scope': scope,
    }), content_type="application/x-javascript")

Однако я не думаю, что это хорошее решение. Этот код устанавливает пользовательские правила маршрутизации, которые вообще не нужны для производства.

То, что я ищу, — это локальное исправление с использованием прокси-сервера или что-то еще, что позволило бы мне обслуживать работника службы с ворчанием, как и все другие активы.


person Dreen    schedule 12.05.2017    source источник


Ответы (1)


Я считаю, что этот ресурс может быть вам полезен: https://googlechrome.github.io/samples/service-worker/foreign-fetch/

По сути, вы размещаете Service worker на порту 8001, и сервер обрабатывает его, как показано в примере. Потом берешь оттуда.

Внешняя выборка более подробно описана здесь: https://developers.google.com/web/updates/2016/09/foreign-fetch

person Nemanja Milosavljevic    schedule 13.05.2017