我有一个Angular Web App,该更新具有更频繁的更改,因此当我构建并发布到IIS时,该应用程序不会向最终用户提供最新的构建文件。必须按Ctrl + F5才能从服务器获取新文件。
我使用以下CLI命令来生成构建文件。我使用Angular 8。
ng build --aot --outputHashing = bundles --prod
我应该为此添加其他任何参数吗?
答案 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"),