Я добавил работника сервиса в свое приложение с помощью команды:
ng add @angular/pwa --project ng-zero
В терминале он ответил так:
Installed packages for tooling via npm.
CREATE ngsw-config.json (441 bytes)
CREATE src/manifest.json (1071 bytes)
CREATE src/assets/icons/icon-128x128.png (1253 bytes)
CREATE src/assets/icons/icon-144x144.png (1394 bytes)
CREATE src/assets/icons/icon-152x152.png (1427 bytes)
CREATE src/assets/icons/icon-192x192.png (1790 bytes)
CREATE src/assets/icons/icon-384x384.png (3557 bytes)
CREATE src/assets/icons/icon-512x512.png (5008 bytes)
CREATE src/assets/icons/icon-72x72.png (792 bytes)
CREATE src/assets/icons/icon-96x96.png (958 bytes)
UPDATE angular.json (3825 bytes)
UPDATE package.json (1985 bytes)
UPDATE src/app/app.module.ts (2042 bytes)
UPDATE src/index.html (851 bytes)
Ошибка не возникла, только некоторые предупреждения.
Файл app.module.ts
теперь содержит:
import { ServiceWorkerModule } from '@angular/service-worker';
...
imports: [
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }),
И я не трогал файл конфигурации ngsw-config.json
:
{
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html",
"/*.css",
"/*.js"
]
}
}, {
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**"
]
}
}
]
}
Мой 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();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.then(
() => {
}
)
.catch(error => {
console.log(error);
});
И файл index.html
:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>NgZero</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<link rel="manifest" href="manifest.json">
<meta name="theme-color" content="#1976d2">
</head>
<body class="mat-app-background">
<app-root>Loading...</app-root>
<noscript>Please enable JavaScript to continue using this application.</noscript>
</body>
</html>
Файлы под корнем документа:
$ ll ng-zero/
total 1,2M
-rw-rw-r-- 1 stephane 42K oct. 18 13:20 3rdpartylicenses.txt
-rw-rw-r-- 1 stephane 14K oct. 18 13:20 4.c1db20ef5bd9add4749b.js
drwxrwxr-x 3 stephane 4,0K oct. 18 13:20 assets/
-rw-rw-r-- 1 stephane 5,4K oct. 18 13:20 favicon.ico
-rw-rw-r-- 1 stephane 993 oct. 18 13:20 index.html
-rw-rw-r-- 1 stephane 847K oct. 18 13:20 main.07ca5763aa8c2813b8c7.js
-rw-rw-r-- 1 stephane 1,1K oct. 18 13:20 manifest.json
-rw-rw-r-- 1 stephane 3,2K oct. 18 13:20 ngsw.json
-rw-rw-r-- 1 stephane 132K oct. 18 13:20 ngsw-worker.js
-rw-rw-r-- 1 stephane 58K oct. 18 13:20 polyfills.eba1d61bda8f41298ad5.js
-rw-rw-r-- 1 stephane 2,2K oct. 18 13:20 runtime.fa8fa8286609c1c01b2a.js
-rw-rw-r-- 1 stephane 519 oct. 18 13:20 safety-worker.js
-rw-rw-r-- 1 stephane 63K oct. 18 13:20 styles.f57681079a43921c301b.css
-rw-rw-r-- 1 stephane 519 oct. 18 13:20 worker-basic.min.js
Затем я перешел к этомувеб-страница https://angular.io/guide/service-worker-getting-started
и может успешно выполнять все упражнения, таким образом, обслуживающий работник выполняет свою работу в автономном режиме.
Я также добавил этот исходный код в файл app.component.ts
и увидел, что он работает нормально вмобильный браузер, так как он предлагал мне загрузить более новую версию:
ngOnInit() {
if (this.swUpdate.isEnabled) {
this.swUpdate.available.subscribe(() => {
if (confirm('A newer version of the application is available. Load the new version ?')) {
window.location.reload();
}
});
}
}
Но когда я открою консоль браузера Chrome, перейдите на вкладку Application
, выберите запись Manifest
и нажмитепо ссылке Add to homescreen
консоль отображает следующую ошибку: Site cannot be installed: no matching service worker detected. You may need to reload the page, or check that the service worker for the current page also controls the start URL from the manifest
В файле manifest.json
значение start_url
is /
"start_url": "/"
Затем я изменил значение start_url
на https://stephaneeybert.github.io/stephaneeybert/ng-zero/
и перераспределил, но жалуется, что https://stephaneeybert.github.io/stephaneeybert/ng-zero/manifest.json
не найден (404).
Воткак я создаю приложение:
ng build --prod --base-href /stephaneeybert/ng-zero/
Приложение развернуто в https://stephaneeybert.github.io/stephaneeybert/ng-zero/
Я на "@angular/cli": "^7.0.0-rc.2"
и "@angular/core": "^7.0.0-rc.0"