У меня есть веб-приложение, которое должно работать в автономном режиме. Я хочу создать своего сервисного работника для обработки кэширования API / syn c logi c и позволить сервисному работнику angular кэшировать ресурсы приложения.
Я получил Angular работника зарегистрироваться и работать отлично. Но я не смог зарегистрировать своего работника.
Я попробовал три метода:
//1. Does not seem to do anything. No worker built, no worker starter.
ServiceWorkerModule.register('./offline.worker', {enabled: environment.production});
//2. The worker does not get built, registering fails since the script does not exist.
navigator.serviceWorker.register('./offline.worker');
//3. The worker gets built, it even gets started, but is not registered as ServiceWorker.
new Worker('./offline.worker', {type: 'module'});
Итак, вариант 1 работает нормально, используя документы на сервисном работнике angular, когда мы указываем на файл ngsw js. Может быть, он просто не предназначен для работы наших работников?
Вариант 2 - это документированный / стандартный способ регистрации сервисных работников, может, мне просто нужно заставить своего работника быть построенным? Я не знаю, с чего начать ... Полная ошибка, которую я получаю:
Uncaught (в обещании) TypeError: Не удалось зарегистрировать ServiceWorker для области ('http://localhost : 8080 / ') со сценарием (' http://localhost: 8080 / offline.worker '): при получении сценария получен неверный код ответа HTTP (404).
Вариант 3 делает все как я и ожидал. Мой рабочий скомпилирован ./offline.worker
даже изменен на созданный пакет! Это действительно, как я ожидал, чтобы все пошло как надо. К сожалению, созданный таким образом работник - это всего лишь веб-работник, а не ServiceWorker. Это означает, что он не может обрабатывать FetchEvents ...
Ради полноты, вот мой tsconfig.worker. json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/worker",
"lib": [
"es2018",
"webworker"
],
"types": []
},
"include": [
"src/**/*.worker.ts"
],
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
И команды, используемые для запуска angular в производственном режиме, так как работники сферы обслуживания не работают в разработке:
ng build --prod
http-server dist/app