在不更改源代码的情况下执行两次 ng build --prod

Posted

技术标签:

【中文标题】在不更改源代码的情况下执行两次 ng build --prod【英文标题】:execute ng build --prod twice without changing sourcecode 【发布时间】:2020-08-28 08:36:25 【问题描述】:

您好,如果我运行 ng build --prod 两次而不进行任何更改,有人可以解释一下会发生什么。无论是否有文件更改,是否有一些优化或让每个文件都被转译/重新编译。

有人可以解释生成的文件哈希吗?目的是什么,ng 是否以某种方式使用它们?

【问题讨论】:

【参考方案1】:

如果您查看生成的 html,您会发现请求的脚本。 <script src="bundle.hashhashhash.js"></script> 这个脚本可以很容易地缓存,从而提高您的应用程序启动时间。如果您使用更改的 src 编译您的应用程序,您将获得另一个哈希值,该哈希值向浏览器发出信号以使用新脚本而不是缓存的脚本

【讨论】:

【参考方案2】:

文件名中散列的目的是让浏览器在缓存文件时再次下载文件。

让我们这样说吧。

假设ng build --prod 哈希在您每次运行时都保持不变。所以你有类似 main-1234.js 的东西

现在您部署应用,有人访问您的页面,浏览器将下载并缓存您的文件。

一段时间后,您部署了一个新版本,但仍然生成了 main-1234.js 文件。现在,之前访问过您网站的用户不会获得您的文件的新版本,因为浏览器已经缓存了它。如果缓存过期,他们将需要一些时间才能看到新文件,这通常不是您想要的行为。

当您为生产而构建时,Angular 不会使用或关心哈希值。当您运行ng build --prod 时,它实际上会删除您在dist 下的文件。试试看:)

【讨论】:

以上是关于在不更改源代码的情况下执行两次 ng build --prod的主要内容,如果未能解决你的问题,请参考以下文章

如何在不允许请求页面两次的情况下支持 IDM

如何在不包含相同元素两次的情况下遍历列表?

如何在不推动我的情况下从GitHub中提取更改?

如何在不允许表为空的情况下删除ng-repeat表行?

如何在不更改 pvalue 的情况下为 kruskal wallis 测试执行循环比较多列上的 3 个组?

如何在不继承 Java 组件的情况下更改其颜色或边界?