【发布时间】:2017-09-13 06:57:04
【问题描述】:
我有一个带有一些延迟加载路线的 Angular 4 应用程序。 webapp 部署在 wildfly 服务器上。 通常当我更新包并尝试使用该应用程序时,我会得到这个
7.67f0bdb1c002c6632088.chunk.js 加载资源失败:服务器响应状态为 404(未找到) vendor.bb65efd8883ae143b006.bundle.js:1 ERROR 错误:未捕获(在 承诺):错误:加载块 7 失败。错误:加载块 7 失败的。在 HTMLScriptElement.n (inline.c073b632003c3be717dd.bundle.js:1) 在 HTMLScriptElement.o (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 Object.onInvokeTask (vendor.bb65efd8883ae143b006.bundle.js:1) 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 r.runTask (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 e.invokeTask [as 调用] (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 W (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 HTMLScriptElement.q (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 HTMLScriptElement.n (inline.c073b632003c3be717dd.bundle.js:1) 在 HTMLScriptElement.o (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 Object.onInvokeTask (vendor.bb65efd8883ae143b006.bundle.js:1) 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 r.runTask (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 e.invokeTask [as 调用] (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 W (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 HTMLScriptElement.q (polyfills.3d0670849efe6dd6a541.bundle.js:1)在你 (polyfills.3d0670849efe6dd6a541.bundle.js:1)在你 (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 polyfills.3d0670849efe6dd6a541.bundle.js:1 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 Object.onInvokeTask (vendor.bb65efd8883ae143b006.bundle.js:1) 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 r.runTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在o (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 e.invokeTask [as 调用] (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 W (polyfills.3d0670849efe6dd6a541.bundle.js:1) w @ vendor.bb65efd8883ae143b006.bundle.js:1 7.67f0bdb1c002c6632088.chunk.js 加载资源失败:服务器响应状态为404(未找到) vendor.bb65efd8883ae143b006.bundle.js:1 ERROR 错误:未捕获(在 承诺):错误:加载块 7 失败。错误:加载块 7 失败的。在 HTMLScriptElement.n (inline.c073b632003c3be717dd.bundle.js:1) 在 HTMLScriptElement.o (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 Object.onInvokeTask (vendor.bb65efd8883ae143b006.bundle.js:1) 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 r.runTask (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 e.invokeTask [as 调用] (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 W (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 HTMLScriptElement.q (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 HTMLScriptElement.n (inline.c073b632003c3be717dd.bundle.js:1) 在 HTMLScriptElement.o (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 Object.onInvokeTask (vendor.bb65efd8883ae143b006.bundle.js:1) 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 r.runTask (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 e.invokeTask [as 调用] (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 W (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 HTMLScriptElement.q (polyfills.3d0670849efe6dd6a541.bundle.js:1)在你 (polyfills.3d0670849efe6dd6a541.bundle.js:1)在你 (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 polyfills.3d0670849efe6dd6a541.bundle.js:1 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 Object.onInvokeTask (vendor.bb65efd8883ae143b006.bundle.js:1) 在 t.invokeTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在 r.runTask (polyfills.3d0670849efe6dd6a541.bundle.js:1)在o (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 e.invokeTask [as 调用] (polyfills.3d0670849efe6dd6a541.bundle.js:1) 在 W (polyfills.3d0670849efe6dd6a541.bundle.js:1) w @ vendor.bb65efd8883ae143b006.bundle.js:1
我确定这是浏览器缓存问题,因为如果我按 ctrl+shift+F5 应用程序运行正常。
那么我可以使缓存浏览器失效吗?或者在文件名中添加版本/时间戳?
非常感谢 F
【问题讨论】:
-
我认为你可能需要实现一个Angular ServiceWorker,它可以检测到应用程序的新版本已经部署到服务器,然后你可以提示用户更新到新版本。
-
“可以提示用户更新到新版本”是什么意思?它应该对用户透明
-
如果用户正在编辑一些数据,而你“透明地”推送新版本,这会导致浏览器重新加载应用程序而用户丢失编辑怎么办?不是很好的用户体验,因此您提示或显示通知。就像您在手机上收到有关任何应用程序更新的通知一样。您通知用户并让他们选择何时更新到新版本。不要强迫他们。
-
这不是我的情况,我的应用程序是仅在桌面上运行的网络应用程序。一旦用户打开应用程序,如果我在应用程序服务器上更新版本,用户就会使用旧应用程序,直到刷新浏览器。
-
用户使用旧的应用程序,直到他们刷新。如果他们几天不刷新怎么办,只需打开他们的 PC 并打开应用程序。我一直这样做。您需要向他们推送有新版本的通知。而且您仍然会遇到问题,如果您推送该新版本会自动刷新浏览器,结果您可能会在他们正在输入编辑时这样做。
标签: angular caching browser routes chunks