在构建后或部署期间在 ngsw 中重新生成内容哈希
Posted
技术标签:
【中文标题】在构建后或部署期间在 ngsw 中重新生成内容哈希【英文标题】:Regenerate content hash in ngsw after build or during deploy 【发布时间】:2019-06-03 03:41:27 【问题描述】:我们有一个使用 Angular Service Worker 的 Angular 应用程序。
正如我们所知,这个 Service Worker 将缓存文件中的内容哈希值与 ngsw.json
文件中的哈希值进行比较。
现在,我们已经设置了持续集成和交付(使用 Azure DevOps,但应该没关系),在交付阶段,我们正在修改 environment.json
文件中的一些设置(如配色方案、API url ...都与部署目标有关)。问题是,通过修改该 json 文件,哈希不再与 ngsw.json
文件中该文件的哈希匹配。
我们绝对不想为专门的目标环境重建,因为这违背了 CI/CD 的目的。 (一旦包进入 QA 流程,您不希望为生产环境重新构建包)。
所以问题是:在我们修改environment.json
(或任何其他)文件后,有没有办法在ngsw.json
文件中重新生成哈希?或者这个问题有其他解决方案吗?
【问题讨论】:
希望我能更多地支持这一点,如果我要更改的只是配置,我不想为每个环境重建我的应用程序,并且我不想包含npm install
步骤每个版本都只是为了构建这个小小的 ngsw-config 实用程序,我希望它是 Angular CLI 的一部分!
【参考方案1】:
另一种无需交付整个 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 映像很小并且没有很多不需要的二进制文件。
【讨论】:
【参考方案2】:你说的是以下命令吗:
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? @AaronTurkel 你会的,但你不需要 ng build --prod 等吗? 我们设置了每次推送都会创建一个我们存储的产品构建。到了发布的时候,我们就抓住那个 dist。但是标记化发生在发布步骤中,所以我需要重新创建哈希表。尝试仅复制脚本,但看起来它依赖于 angular cli 包的其他部分。 @AaronTurkel 是的,你需要整个 CLI 才能做到这一点。以上是关于在构建后或部署期间在 ngsw 中重新生成内容哈希的主要内容,如果未能解决你的问题,请参考以下文章
RuntimeError:在 Rack 中的迭代期间无法将新密钥添加到哈希中
在重新部署 .ear 文件期间未执行 Liquibase 脚本[关闭]
如何使 Git 提交哈希在 C++ 代码中可用而无需重新编译?