Angular App不向最终用户提供最新的构建文件

时间:2019-07-02 11:17:50

标签: angular angular8

我有一个Angular Web App,该更新具有更频繁的更改,因此当我构建并发布到IIS时,该应用程序不会向最终用户提供最新的构建文件。必须按Ctrl + F5才能从服务器获取新文件。

我使用以下CLI命令来生成构建文件。我使用Angular 8。

  

ng build --aot --outputHashing = bundles --prod

我应该为此添加其他任何参数吗?

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,发现它来自Web服务器(以我的情况为Apache)。

在生产环境中部署应用程序时,根文件(index.html)包含以下代码:

<!doctype html>
<html lang="en">
    <head>
        <base href="/">
        <title>test</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="manifest" href="manifest.json">
    </head>
    <body>
        <app-root></app-root>
        <script src="/runtime.937c2b326bb921beac97.js" defer></script>
        <script src="/polyfills.a78c48dee545feb95e6a.js" defer></script>
        <script src="/scripts.14a9d42d0791cb2fa37d.js" defer></script>
        <script src="/main.57de7a395d76adaeeb43.js" defer></script>
    </body>
</html>

默认情况下,我的Apache serveur缓存了JS文件和index.html。因此,当我部署新版本时,用户仍然可以使用引用旧JS文件的旧index.html

要解决此问题,我强制浏览器不要缓存index.html。每次在浏览器中加载应用程序时都会获取该文件,因此该版本始终是最新版本,因此也是JS文件。

Apache配置:

<VirtualHost *:443>
    # ...
    <If "%{REQUEST_URI} == '/'">
        Header Set Pragma "no-cache"
        Header Set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
        Header Set Cache-Control "max-age=0, no-store, no-cache, must-revalidate"
        Header Unset ETag
        FileETag None
    </If>
</VirtualHost>

对于IIS服务器,请参见How to disable caching of single page application HTML file served through IIS?

答案 1 :(得分:0)

为此,您可以将IIS设置为不缓存index.html文件。为此,您只需将web.config文件包含到www文件夹中,然后将此设置添加到其中即可。

 GlobalUtil.showAppBar(context, "YOUR HEADING TEXT",
            "YOUR_ICON_FOR_BACK"),