在构建后或部署期间在 ngsw 中重新生成内容哈希

Regenerate content hash in ngsw after build or during deploy

我们有一个使用 angular service worker 的 Angular 应用程序。

正如我们所知,该服务工作者将缓存文件中的内容哈希值与 ngsw.json 文件中的哈希值进行比较。

现在,我们已经设置了持续集成和交付(使用 Azure DevOps,但应该无关紧要)并且在交付阶段,我们正在修改 environment.json 文件中的一些设置(例如颜色方案,API url...都与部署目标有关)。问题是,通过修改 json 文件,散列不再与 ngsw.json 文件中该文件的散列相匹配。

我们绝对不想为专用目标环境重建,因为这违背了 CI/CD 中的目的。 (一旦包进入 QA 流程,您不想为生产环境重建包)。

所以问题是:在我们修改 environment.json(或任何其他)文件后,有没有办法在 ngsw.json 文件中重新生成哈希值?或者这个问题有其他解决方案吗?

你说的是下面的命令吗:

node_modules/.bin/ngsw-config dist src/ngsw-config.json

您可以将命令放在 package.json:

  "scripts": {
    "ngsw-config": "node_modules/.bin/ngsw-config dist src/ngsw-config.json"
  }

这会为您重做配置和哈希。 运行 在你最后的命令之后,这应该可以在你的 CI 环境中实现。

另请注意,如果您使用其中之一,它可以采用基本 href 参数。

这里有更多解释:Angular doc

无需运送整个 Angular CLI 包即可更新 ngsw.json 中的散列的另一种方法是使用这个小型开源工具来重新创建散列。

wget https://github.com/dev-jan/ngsw-rehash/releases/download/v1.0/ngsw-rehash-linux-x86 -o ngsw-rehash
chmod +x ngsw-rehash
ngsw-rehash <path-to-dist>/ngsw.json

它是一个小型的独立二进制文件,没有任何依赖项。来源可以在这里找到:https://github.com/dev-jan/ngsw-rehash

我创建这个工具是因为我有同样的问题并且不想使用 ngsw-config 工具来保持我的最终 Docker 图像小并且没有很多不需要的二进制文件。