アンギュラーサービスワーカーをアプリケーションに統合するのに苦労しています。私はガイドに従いましたが、今のところうまくいきます。ホーム画面にショートカットを作成して、アプリを起動できます。問題は、アプリがどういうわけか更新されないことです。ボタンの名前を変更し、アプリをビルドしてサーバーに配置すると、F5キーを押すまでアプリに古いバージョンが表示されます(アプリを再起動しても解決しません)。
私は私のアプリのngOnInotに次のコードを入れようとしましたが、助けにはなりませんでした
ngOnInit() {
if (this._SwUpdate.isEnabled) {
setInterval( () => {
this._SwUpdate.checkForUpdate().then(() => console.log('checking for updates'));
}, this.updateInterval);
this._SwUpdate.available.subscribe(() => {
console.log('update found');
this._SwUpdate.activateUpdate().then(() => {
console.log('updated');
window.location.reload();
});
});
}
}
アプリはApache2 Linuxマシンで実行されています。私のApacheは何かをキャッシュしているのですか、それとも新しいバージョンがあることをアプリが認識しないのですか?
助けてくれてありがとう:)
編集:
私のngsw-config.json
{
"index": "/index.html",
"assetGroups": [{
"name": "roomPlan",
"installMode": "prefetch",
"resources": {
"files": [
"/index.html",
"/*.css",
"/*.js"
]
}
}, {
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**"
]
}
}]
}
編集2:
「http-server」を使用してローカルでアプリを実行すると機能しますが、ファイルをApacheにコピーしても更新は検出されません。 [ネットワーク]タブで、間隔が機能していることがわかります。アプリは3秒ごとにサーバーから新しい「ngsw.json」を取得します。アプリを更新すると、「ngsw.json」の応答内に新しいハッシュ値があることがわかります。その後、ブラウザはサーバーから新しい「index.html」と「main。***。js」を読み込みますが、アプリは新しいバージョンを適用しません。私のコードによれば、「アップデートが見つかりました」と表示されるはずですが、何も起こりません。
アプリケーションを変更するには、このメソッドactivateUpdate(
import { SwUpdate } from '@angular/service-worker';
export class AppComponent implements OnInit {
constructor(private swUpdate: SwUpdate) { }
ngOninit() {
this.swUpdate.available.subscribe(event => {
console.log('A newer version is now available. Refresh the page now to update the cache');
});
this.swUpdate.checkForUpdate()
}
}
このリンクを確認してください: https://angular.io/guide/service-worker-getting-started
スタック上の他のすべてのソリューションが機能しなかった後、angularのngsw-worker.jsスクリプトのデバッグを開始しました。更新ロジックをトレースし、「PrefetchAssetGroup」メソッドになりました。メソッドが呼び出されるたびにロギングを挿入しましたが、favicon.icoを常にキャッシュしようとしていることに気付きました。 ngsw.jsonでfavicon.icoの場所を確認しましたが、ファビコンがそこにないことに気付きました。その場所にアイコンを配置すると、すべてが正常に動作し始めました。