好吧,我以前从未见过这样的事情,希望其他人也见过。我刚刚将我们的开发和测试服务器修补到 Nov2017CU (SharePoint 2013)。从那时起,任何使用站点 Assets 中的 JS 注入(inject)的解决方案都不会更新。我将对文件进行更改,库反射(reflect)了我所做的更改,但是当我尝试加载访问 js 文件的页面时,更改没有反射(reflect)出来。硬刷新和完整缓存清理不会影响它。如果我关闭并重新打开编辑器 (VSCode),我的更改就会消失。当我查看版本历史记录时,当前版本没有我的更改,但以前的版本有。如果我尝试恢复到该版本,则不会(仍然显示文件的先前版本)。
这就是事情变得格外奇怪的地方。我已从库中删除了整个文件。重置 IIS(哎呀,我什至一度重新启动了服务器)。它以某种方式仍然加载文件。该文件不再位于库中,但服务器仍在将其提供给浏览器。我已确认它没有从其他位置获取它,因为开发工具显示该文件位于文件被删除的资源库中。即使以前从未访问过该网站的用户仍然可以在浏览器中获取该文件。
这也不限于单个站点。我在不同子网站(同一网站集)中的其他开发人员也遇到了相同的问题。 有人以前见过这个吗?
最佳答案
看起来您的 Web 应用程序启用了 BLOB 缓存,这导致从缓存提供文件。
有两种修复方法:
1) 最严厉的方法是使用提到的 powershell 命令刷新 BLOB 缓存:
$webApp = Get-SPWebApplication "<WebApplicationURL>"
[Microsoft.SharePoint.Publishing.PublishingCache]::FlushBlobCache($webApp)
这将刷新 BLOB 中的所有文件。通常,文件根据 max-age
属性值进行缓存。因此,这就是即使您已从源中删除文件,仍会提供文件的原因。
2) 手术刀方法是将查询字符串附加到文件引用(通常在母版页、页面布局、Web 部件引用、脚本链接等(无论在何处引用)。当您将查询字符串附加到文件时,它将强制浏览器下载该文件的较新版本。更喜欢这种方法,因为它不会不必要地从 BLOB 中清除其他文件。
关于sharepoint - 站点 Assets 中的 JS 文件未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48324747/