Как заставить работника не Angular работать в Angular - PullRequest
2 голосов
/ 14 мая 2019

Я пытался внедрить Service Worker в совершенно новое приложение Angular.Это не угловая SW, это просто из коробки API.Я хочу целенаправленно использовать этот вместо Angular's (на всякий случай, если это спросили).После прочтения кажется, что проблема, с которой я сталкиваюсь, связана с проблемами пути, но я считаю, что путь у меня правильный.Другая проблема, с которой я столкнулся, заключается в том, что мы не можем использовать ng serve и успешно зарегистрировать ПО, поэтому я начал делать ng build --prod, а затем развертывать его, используя http-server, но все же я получаю следующую ошибку:

Service worker registration failed: TypeError: Failed to register a ServiceWorker: A bad HTTP response code (404) was received when fetching the script.

Какие шаги мне нужно, чтобы успешно зарегистрировать это ПО?

Кроме того, моя файловая структура:

- main.ts
- index.html
- service-worker.js

Файл service-worker.js пуста в моем main.ts файле содержится регистрация:

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('./service-worker.js')
  .then(registration => console.log('Service worker registration succeeded:', registration)
  , error => console.log('Service worker registration failed:', error));
} else {
  console.log('Service workers are not supported.');
}
platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));```

1 Ответ

0 голосов
/ 14 мая 2019

Так что я в конечном итоге придумал решение, о котором хотел бы получить обратную связь из-за недостатка понимания.

Поскольку я запускаю команду углового построения, я посмотрел в файл angular.json и извлек команду.Я добавил service-worker.js в массив assets (в форме src/service-worker.js), а также мой файл manifest.json в массив, потому что у меня были проблемы, аналогичные вышеприведенному вопросу, и это все исправило.

SW успешно регистрируется после выполнения вышеуказанного.Я предполагаю, потому что угловой компилятор компилирует все в один выходной файл, так как он находится в той же структуре, что и index.html, и указание их в качестве актива сделает его не включенным в «комплектацию»?

ПРИМЕЧАНИЕ Использование этого решения также позволяет мне использовать ng-serve (поэтому нет необходимости создавать и использовать http-server)

...