我是Web部署的新手。现在,我必须管理Windows Server,每个月都需要部署新版本的应用程序。
我在使用javascript时遇到问题。在几乎每个版本的Web应用程序中,都更改了一些javascript文件(所有javascript文件都捆绑在一个缩小的javascript文件中)。
大多数用户使用谷歌浏览器。问题是浏览器缓存了一个javascript文件样式。部署新版本后,将旧版本的javascript文件加载到浏览器中。
是否存在任何解决方案,如何在部署后在应用程序或某些解决方案中以编程方式解决此问题?在最佳情况下,如果没有用户协作(例如,通过CTRL + R刷新缓存)?最佳做法是什么?
我们的应用程序是作为.NET CORE 2 Razor Pages Web应用程序开发的。
感谢您的意见
[Use the tag helpers for script和style文件,具有附加属性append-version
,每次文件中有更改时,该属性都会附加新的查询字符串值。
<link href="/styles/site.css" append-version="true" />
<script src="/scripts/site.js" append-version="true"></script>
如果您使用的是普通的html,css,js项目,则可以在js和css库中添加版本控制,并使用更新的版本更新index.html。
或者,如果您使用的是节点js,react js,angular js,则可以使用index.ejs而不是index.html,并且可以通过js和css库添加哈希码,例如
script1.1ebecec8538d52c8f844.js
script2.2e765bd6680f0c925e8a.js
style1.1ebecec8538d52c8f844.css
style2.2e765bd6680f0c925e8a.css
或者您也可以将CI / CD用于npm项目。
您可以确保对捆绑文件所做的所有更新都将立即对所有使用版本化名称的用户进行:
<link rel="stylesheet" href="style.css?v=1.1">
浏览器将查看style.css
的文件名与style.css?v=1.1
的文件名不同。它也适用于脚本文件:
<script src="main.bundle.js?version=1.0.1"></script>
但是如果您有一个巨型文件,并且更改了一行代码,则用户必须再次下载整个文件。考虑一种解决方案,以创建更多较小的文件,例如从您自己的代码中拆分解决方案中使用的npm
程序包,以获得更好的发布流程。
如果这是关于.css和.js的更改,一种方法是通过在每个发行版的文件名后附加“ _versionNo”之类的内容来“清除缓存”。例如:
script_1.0.css // This is the URL for release 1.0
script_1.1.css // This is the URL for release 1.1
script_1.2.css // etc.
或者也可以在文件名之后进行:
script.css?v=1.0 // This is the URL for release 1.0
script.css?v=1.1 // This is the URL for release 1.1
script.css?v=1.2 // etc.
请检查链接Link