Kami sedang mengerjakan proyek baru dengan pembaruan rutin yang digunakan setiap hari oleh salah satu klien kami. Proyek ini dikembangkan menggunakan angular 2 dan kami menghadapi masalah cache, yaitu klien kami tidak melihat perubahan terbaru pada mesin mereka.
Terutama file html / css untuk file js tampaknya diperbarui dengan benar tanpa menimbulkan banyak masalah.
ng build
, menambahkan-prod
tag menambahkan hash ke nama file yang dihasilkan. Ini memaksa memuat ulang segalanya kecualiindex.html
. Posting github ini memiliki beberapa petunjuk untuk membuatnya dimuat ulang.Jawaban:
angular-cli menyelesaikan ini dengan memberikan
--output-hashing
tanda untuk perintah build (versi 6/7, untuk versi yang lebih baru lihat di sini ). Contoh penggunaan:Bundling & Tree-Shaking memberikan beberapa detail dan konteks. Berjalan
ng help build
, mendokumentasikan bendera:Meskipun ini hanya berlaku untuk pengguna angular-cli , ini bekerja dengan sangat baik dan tidak memerlukan perubahan kode atau perkakas tambahan.
Memperbarui
Sejumlah komentar telah membantu dan dengan benar menunjukkan bahwa jawaban ini menambahkan hash ke
.js
file tetapi tidak melakukan apa-apaindex.html
. Oleh karena itu, sangat mungkin bahwaindex.html
tetap di-cache setelahng build
cache merusak.js
file.Pada tahap ini, saya akan mengacu pada Bagaimana kami mengontrol cache halaman web, di semua browser?
sumber
Menemukan cara untuk melakukan ini, cukup tambahkan querystring untuk memuat komponen Anda, seperti:
Ini akan memaksa klien untuk memuat salinan template server, bukan milik browser. Jika Anda ingin me-refresh hanya setelah jangka waktu tertentu Anda dapat menggunakan ISOString ini sebagai gantinya:
Dan substring beberapa karakter sehingga hanya akan berubah setelah satu jam misalnya:
Semoga ini membantu
sumber
templateUrl: './app/shared/menu/menu.html?v=' + Math.random()
Di setiap template html saya hanya menambahkan tag meta berikut di bagian atas:
Dalam pemahaman saya setiap template berdiri bebas oleh karena itu tidak mewarisi meta tidak ada pengaturan aturan caching di file index.html.
sumber
Kombinasi jawaban @ Jack dan jawaban @ ranierbit akan berhasil.
Setel flag ng build untuk --output-hashing jadi:
Kemudian tambahkan kelas ini di layanan atau di app.moudle Anda
Kemudian tambahkan ini ke penyedia Anda di app.module Anda:
Ini akan mencegah masalah cache di situs langsung untuk mesin klien
sumber
Saya memiliki masalah serupa dengan index.html yang di-cache oleh browser atau lebih rumit oleh cdn / proxy tengah (F5 tidak akan membantu Anda).
Saya mencari solusi yang memverifikasi 100% bahwa klien memiliki versi index.html terbaru, untungnya saya menemukan solusi ini oleh Henrik Peinar:
https://blog.nodeswat.com/automagic-reload-for-clients-after-deploy-with-angular-4-8440c9fdd96c
Solusi ini juga mengatasi kasus di mana klien tetap dengan browser terbuka selama berhari-hari, klien memeriksa pembaruan pada interval dan memuat ulang jika versi yang lebih baru diterapkan.
Solusinya agak rumit tetapi berfungsi seperti pesona:
ng cli -- prod
menghasilkan file hash dengan salah satunya disebut main. [hash] .jsKarena solusi Henrik Peinar adalah untuk sudut 4, ada perubahan kecil, saya juga menempatkan skrip tetap di sini:
VersionCheckService:
ubah ke AppComponent utama:
Skrip post-build yang membuat keajaiban, post-build.js:
cukup tempatkan skrip di (baru) folder build jalankan skrip menggunakan
node ./build/post-build.js
setelah membangun folder dist menggunakanng build --prod
sumber
Anda dapat mengontrol cache klien dengan header HTTP. Ini berfungsi dalam kerangka web apa pun.
Anda dapat menyetel arahan dari header ini agar memiliki kontrol yang sangat baik tentang bagaimana dan kapan harus mengaktifkan | nonaktifkan cache:
Cache-Control
Surrogate-Control
Expires
ETag
(sangat bagus)Pragma
(jika Anda ingin mendukung browser lama)Caching yang baik itu bagus, tetapi sangat kompleks, di semua sistem komputer . Lihat https://helmetjs.github.io/docs/nocache/#the-headers untuk informasi lebih lanjut.
sumber