【发布时间】:2020-06-09 13:29:40
【问题描述】:
我遇到了与 Linwe 在此处报告的相同或非常相似的问题:Angular : service worker configuration(在提出此问题时没有答案)。
我使用 Angular CLI 创建了一个新项目,然后按照此处列出的步骤添加了对服务工作者的支持:https://angular.io/guide/service-worker-getting-started。我更改了网站的内容,只说“这是应用程序组件”,所以它非常简单,没有任何功能。我只是想单独测试服务人员。
Service Worker 技术使用了一个名为“manifest.webmanifest”的文件,该文件在我的本地 IIS 中没有定义 MIME 类型,因此我添加了它(application/manifest+json)。但即便如此,我的网络浏览器 (Chrome) 也无法始终找到该文件(而是在获取请求时获取 index.html 页面)。但是,根据manifest.json vs manifest.webmanifest,名称中没有什么神奇之处,因此我在文件末尾添加了“.json”,并修改了引用以使用该名称。这似乎工作正常。
在 Visual Studio 2019 中运行(使用 IIS Express,并在 https://localhost:44303/ 上处理请求),根本没有创建服务工作者。当我转到 Chrome 的 DevTools 的 Application 选项卡并寻找 service worker 时,我什么也没看到。
但是当我将站点部署到本地 IIS 时,我可以看到(在 http 或 https 下)服务工作者已创建并正在运行:
当在线运行时,我可以看到服务工作者(如 Linwe)正在提供内容。但是当我转到“网络”选项卡并将浏览器脱机时,我遇到了与根本没有使用服务工作者一样的错误:
在网络选项卡中,我看到一个失败的 fetch 命令(预期??),但我没有看到任何其他错误:
我只为这个(相当简单的)应用程序转向服务工作者,因为 Chrome 将在 4 月停止对 AppCache 的支持。如果服务人员无法在 Chrome 中工作,我不知道还有什么替代方案...
任何帮助将不胜感激。
(我注意到 Linwe 表示他的问题仅出现在 Windows 上运行的浏览器上 - 他说运行在 MAC 上的浏览器是可以的。我没有 MAC 来验证它,但该评论暗示了 Windows 特有的一些东西。 )
更新:我完全按照此处列出的步骤重新开始:https://angular.io/guide/service-worker-getting-started。然后我使用 http-server 运行它,一切正常。我把它下线了,刷新了页面,看到了缓存的内容。
然后,我完成了整个项目并将所有文件复制到 Visual Studio 2019 Angular 项目的 ClientApp 文件夹中(首先从该文件夹中删除所有文件后)。然后我将它发布到我的本地 IIS,并遇到了与之前报告的相同的问题。服务工作者已创建并且我可以看到它,但是在离线时我没有得到任何缓存的内容。我所做的 only 更改是对我的 angular.json 文件中的 outputPath,因为我希望它部署到 dist 目录的根目录,而不是 dist 目录下的子文件夹(IIS 找不到它)。
然后,为了进一步实验,我从通过 CLI 创建的原始应用程序中的 dist/[项目名称] 文件夹中复制了所有文件,并将它们放在 IIS 中应用程序文件夹的根目录下(首先删除所有其他文件)。我更改了 index.html 文件的基本 href 以匹配应用程序名称,但没有进行其他更改。而且,我再次看到与最初报告的问题相同的问题 - 我看到了服务人员,但离线时不提供缓存的内容。 (无论我是通过 http 还是 https 访问 IIS 站点,都会发生这种情况 - 没有区别。)
因此,在我看来,当我使用 http-server 为它们提供服务时,完全相同的文件在我的服务器是 IIS(这是在 Windows 10 专业 PC 上)时无法正常运行。
我该去哪里???
【问题讨论】:
标签: angular windows google-chrome-devtools visual-studio-2019 angular-service-worker