Я пытаюсь разработать 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")
Однако я не думаю, что это хорошее решение. Этот код устанавливает пользовательские правила маршрутизации, которые вообще не нужны для производства.
То, что я ищу, — это локальное исправление с использованием прокси-сервера или что-то еще, что позволило бы мне обслуживать работника службы с ворчанием, как и все другие активы.