Я следовал официальному руководству angular и успешно установил начальный сервисный работник. Затем я хотел попробовать обновить поведение и получил
TypeError: Невозможно прочитать свойство 'id' из неопределенного
где id ссылается на client.id в методе из ngsw-worker.js
async updateClient(client) {
// Figure out which version the client is on. If it's not on the latest,
// it needs to be moved.
const existing = this.clientVersionMap.get(client.id);
....
}
Шаги, которые я сделал,
- Зарегистрируйте ПО, перешли в автономный режим и перезагрузили (работали), закрыли вкладку, но окно оставалось открытым
- Обновлен код в app.cmp.html
- Перестроенный проект (ng build --prod)
- открыл новую вкладку и приложение (могло наблюдать обновление ПО)
- перезагрузить приложение
- ошибка
Я использую angular-cli 1.7.4, и все угловые библиотеки, включая service-worker, включены в 5.2.10.
Редактировать 1 08.05.2018
На github опубликована проблема в angular-cli 6
https://github.com/angular/angular/issues/23742
Редактировать 2 08.05.2018
Что я мог узнать до сих пор:
ng build --prod не создает новую версию ngsw-worker.js (при перезагрузке новой свежей сборки chrome не отображает «ждать активации»). Когда я перезагружаюсь с или без закрытия предыдущей вкладки, появляется ошибка.
Когда я вручную добавляю что-то в ngsw-worker.js (например, console.log), обычно запускается жизненный цикл, и старый сервисный работник заменяется на «новый».
Когда я перезагружаюсь перед выполнением активации, появляется та же ошибка. В противном случае это работает ...
Более того, попытка удалить работника сервиса с помощью Fail-Safe от angular (удаление или переименование ngsw-config) приводит к ошибке сборки.
Ожидается найти файл конфигурации ngsw-config.json в папке / Users / hanche / Desktop / Development / plays / toggl2. Либо предоставьте один, либо отключите Service Worker в файле конфигурации angular.json.
Редактировать 3 & 'Solution' 09.05.2018
Эта проблема должна быть исправлена, если будет принят этот Запрос на извлечение от 1 мая 2018 года.
Между тем, вы можете автоматически отменить регистрацию работника службы, удалив файл ngsw.json из папки dist / и NOT ngsw-config.json, как описано в разделе отказоустойчивости. Смотрите ответ, который я получил здесь .
Кроме того, это также может быть ошибка хрома