【问题标题】:Angular Service Worker - hash mismatch after PurifyCSS on dist/styles.*.cssAngular Service Worker - 在 dist/styles.*.css 上 PurifyCSS 之后的哈希不匹配
【发布时间】:2020-02-10 20:34:06
【问题描述】:

当我使用 Service Worker 构建 Angular 应用程序时,它会使用每个文件的哈希值创建一个哈希表,以检测应用程序的新版本何时可用。此哈希表在 ngsw.json 中。

这里是一个哈希值的例子。

如果我想用 PurifyCSS 清理未使用的 css,那么 dist/styles.*.css 将更改文件内容并因此更改其哈希值,但 ngsw.json 具有旧哈希值。

在这种情况下,Angular Service Worker 会因为哈希不匹配而失败。

如何避免这种情况?运行 PurifyCSS 后是否应该在 ngsw.json 中手动更新哈希?是否有某种机制可以自动更新此值,或者是否可以在 angular-cli 为每个文件生成哈希之前执行 PurifyCSS?

这个问题一般针对对服务工作者缓存的dist文件进行的任何类型的修改,因为哈希会改变,因此会出现哈希不匹配。这意味着 service worker 不会工作。

提前谢谢你。

【问题讨论】:

标签: angular hash gulp angular-service-worker purifycss


【解决方案1】:

我在 Angular 官方文档中发现了一些非常有用的东西。对 dist 文件夹中的文件进行所有修改后,您可以使用简单的命令重新创建 ngsw.json 文件。

./node_modules/.bin/ngsw-config ./dist/<project-name> ./ngsw-config.json [/base/href]

这会重新生成 ngsw.json 并且 service worker 再次正常工作。

https://angular.io/guide/service-worker-config

【讨论】:

    【解决方案2】:

    我刚刚在使用 Angular Service Worker 时遇到了这个问题。我很难了解它(有趣的事实:NGSW 不会在离线模式下工作,也不会缓存结果)。

    不管怎样,这就是我解决这个问题的方法。

    由于 Angular 在 .js dist 输出中内联组件的 CSS,Angular 输出的独立 .css 文件包含任何全局样式(即styles.css),例如,Bootstrap CSS。我所做的是运行 purifyCSS 并将清理后的输出复制到src/styles.css。这样您就不必在构建后在 ngsw.json 中进行任何 SHA1 哈希修改。缺点是每当你添加一个依赖于不同 Bootstrap 选择器的模块时,你都需要重做这个过程。

    不幸的是,这有点笨拙,但我还没有找到将净化过程集成到“预构建”过程中的方法。

    【讨论】:

    • 我添加了一个可能对你有帮助的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2021-04-23
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多